【问题标题】:Searches for multiple terms lunrjs搜索多个词 lunrjs
【发布时间】:2018-05-03 04:43:39
【问题描述】:

根据lunrjs的官方文档:

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

只有当文档匹配所有搜索词时,它才会显示结果,有什么方法可以做到这一点?

将这些数据编入索引:

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

如果您搜索:

idx.search("foo jander clander");

我希望只有 一个 结果忽略其他两个,因为它们不包含 所有 项,而是包含一些:

// found (1) 
{id: 3, text: "foo bar", body: "jander crispy clander"}

但我所拥有的是:

// found (3) 
{id: 1, text: "foo", body: "jander"}
{id: 2, text: "bar", body: "clander"},
{id: 3, text: "foo bar", body: "jander crispy clander"}

提前感谢您的任何意见。

【问题讨论】:

标签: javascript lunrjs


【解决方案1】:

你提到的pull request已经在2.2.0版本合并发布了。

Lunr 将这个术语称为存在。您不能(还)直接将术语与布尔运算符组合,例如foo AND bar,而是表明查询中存在术语。默认情况下,术语具有可选存在,但现在也可以标记为必需或禁止。

用于搜索的文档(guideapi)已更新,但对于您的具体示例,您可以将查询表述为:

idx.search("+foo +jander +clander")

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

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

【讨论】:

  • 谢谢你,Oliver,恭喜你,lunr 非常棒。
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2021-07-25
  • 2014-01-23
相关资源
最近更新 更多