如何在elasticlunr.js中过滤搜索



我正在尝试搜索@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的结果,而不是所有与字段搜索查询匹配的文档。

例如当我在配置中用expand: true搜索术语su并设置过滤器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"
}
}

谢谢!

您不能使用elasticlunr.js进行这样的筛选。它是一个轻量级全文搜索引擎。

此外,elasticlunr不支持regex

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

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

谢谢

相关内容

  • 没有找到相关文章

最新更新