1

i am trying to search an index generated by @gatsby-contrib/elasticlunr the generated index looks like this:

    {
     "version": "0.9.5",
     "fields": ["title", "path", "section"],
     "ref": "id",
     "documentStore": {
        "docs": {
            "fe565569-77a5-566d-bb47-96a6094c22c5": {
                "id": "fe565569-77a5-566d-bb47-96a6094c22c5",
                "title": "schema",
                "path": "/graphql/schema",
                "section": "graphql"
            },
            "cd1cdd40-4bb7-5ff6-9908-6c9ad692e75c": {
                "id": "cd1cdd40-4bb7-5ff6-9908-6c9ad692e75c",
                "title": "Component",
                "path": "/react/component",
                "section": "react"
            },
            "c1aecadb-3d1e-5d49-87f3-2b6f2c73433c": {
                "id": "c1aecadb-3d1e-5d49-87f3-2b6f2c73433c",
                "title": "Component",
                "path": "/react/component2",
                "section": "react"
            },
            "07159f12-dafb-53f6-b1ad-5032d56d25bb": {
                "id": "07159f12-dafb-53f6-b1ad-5032d56d25bb",
                "title": "Lazy",
                "path": "/react/suspense",
                "section": "react"
            },
            "380309db-ffa1-5f24-a192-36ac36b90a06": {
                "id": "380309db-ffa1-5f24-a192-36ac36b90a06",
                "title": "suspense",
                "path": "/react/lazy",
                "section": "react"
            },
           "380309db-ffa1-5f24-a192-36ac36b90uuuu": {
                "id": "380309db-ffa1-5f24-a192-36ac36b9uuuu",
                "title": "super",
                "path": "/graphql/super",
                "section": "graphql"
            }
        }
    }
   .....
}

is there a way i can get only get results whose section == react alone, and not all docs that match a search query in terms of a field.

e.g when i search with a term su with expand: true in the config and set a filter section = 'graphql' it should return :

      "380309db-ffa1-5f24-a192-36ac36b90uuuu": {
            "id": "380309db-ffa1-5f24-a192-36ac36b9uuuu",
            "title": "super",
            "path": "/graphql/super",
            "section": "graphql"
       }

but what i am currently getting is :

{
    "380309db-ffa1-5f24-a192-36ac36b90a06": {
        "id": "380309db-ffa1-5f24-a192-36ac36b90a06",
        "title": "suspense",
        "path": "/react/lazy",
        "section": "react"
    },
    "380309db-ffa1-5f24-a192-36ac36b90uuuu": {
        "id": "380309db-ffa1-5f24-a192-36ac36b9uuuu",
        "title": "super",
        "path": "/graphql/super",
        "section": "graphql"
    }
}

Thanks!

1 Answers1

1

You can't filter like this with elasticlunr.js. It's a Lightweight full-text search engine.

Also elasticlunr does not support regex

Alternatively you can filter result by using loop again.

var finalResult ={};
    for (var key in label) {
        var result = label[key];
        // graphql
        if (result.doc.section === 'graphql' && !!result.doc.title.match(/su/g)) {
            finalResult[key] = result;
        }
        console.log(finalResult);
    }
    // output 
    console.log(finalResult);

Thank you

Shapon Pal
  • 1,098
  • 3
  • 16
  • 27