Как отфильтровать поиск вasticlunr.js - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь найти индекс, сгенерированный @gatsby-contrib/elasticlunr, сгенерированный индекс выглядит следующим образом:

    {
     "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"
            }
        }
    }
   .....
}

есть способ получить результаты, чьи section == reactодин, а не все документы, которые соответствуют поисковому запросу в терминах поля.

например, когда я ищу с термином su с expand: true в конфигурации и устанавливаю фильтр section = 'graphql', он должен вернуть:

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

но сейчас я получаю:

{
    "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"
    }
}

Спасибо!

1 Ответ

0 голосов
/ 14 мая 2019

Вы не можете фильтровать таким образом сasticlunr.js.Это легковесная полнотекстовая поисковая система.

Такжеasticlunr не поддерживает регулярное выражение

В качестве альтернативы вы можете отфильтровать результат, используя цикл снова.

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);

Спасибо

...