如何在elasticlunr.js中进行过滤器搜索

时间:2018-11-22 13:12:00

标签: javascript gatsby lunrjs

我正在尝试搜索@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 :(得分:0)

您无法使用elasticlunr.js进行此类过滤。这是一个轻量级的全文本搜索引擎。

  

elasticlunr也不支持正则表达式

或者,您可以再次使用循环来过滤结果。

document.select("a img"); //selects all images inside a link
document.select(":not(a) img"); //images not inside a link (does not work)

谢谢