首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索多个术语lunrjs

搜索多个术语lunrjs
EN

Stack Overflow用户
提问于 2018-04-20 17:16:00
回答 1查看 1.2K关注 0票数 0

根据午餐会的正式文件:

“还支持多个词的搜索。如果一个文档至少匹配其中一个搜索项,它将显示在结果中。搜索项与OR组合。”

只有当一个文档与所有的匹配时,搜索条件才会显示结果,那么有什么方法可以做到这一点呢?

将这些数据编入索引:

代码语言:javascript
复制
[
  {id: 1, text: "foo", body: "jander"}
  {id: 2, text: "bar", body: "clander"},
  {id: 3, text: "foo bar", body: "jander crispy clander"}
  {id: 4, text: "foz", body: "lorem ipsum"}
  ...
]

如果你通过以下方式搜索:

代码语言:javascript
复制
idx.search("foo jander clander");

我希望只有一个结果忽略另外两个,因为它们不包含所有的术语,而只包含几个:

代码语言:javascript
复制
// found (1) 
{id: 3, text: "foo bar", body: "jander crispy clander"}

但我拥有的是:

代码语言:javascript
复制
// found (3) 
{id: 1, text: "foo", body: "jander"}
{id: 2, text: "bar", body: "clander"},
{id: 3, text: "foo bar", body: "jander crispy clander"}

谢谢您提供的任何信息。

EN

回答 1

Stack Overflow用户

发布于 2018-05-02 20:43:39

您提到的拉请求已在2.2.0版本中合并并发布。

隆尔称这个词为“存在”。您还不能(还)直接将术语与布尔运算符(例如foo AND bar )组合在一起,而是指示查询中是否存在术语。默认情况下,术语有可选的存在,但现在也可以将其标记为必需的或禁止的。

用于搜索的文档(指南api接口)已经更新,但是对于特定的示例,您可以将查询表述为:

代码语言:javascript
复制
idx.search("+foo +jander +clander")

这也是通过更低级别的查询api公开的:

代码语言:javascript
复制
idx.query(function (q) {
  q.term("foo", { presence: lunr.Query.presence.REQUIRED })
  q.term("jander", { presence: lunr.Query.presence.REQUIRED })
  q.term("clander", { presence: lunr.Query.presence.REQUIRED })
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49946734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档