搜索多个术语lunrjs

时间:2018-04-20 17:16:00

标签: javascript lunrjs

根据lunrjs的官方文件:

  

“也支持搜索多个术语。如果文档与至少一个搜索术语匹配,则会在结果中显示。搜索术语与OR结合使用。”

是否有任何方法可以实现这一目标,只有当文档与所有搜索字词匹配时才会显示结果?

将这些数据编入索引:

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

但我拥有的是:

<form>

提前感谢任何输入。

1 个答案:

答案 0 :(得分:0)

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

Lunr称这个词存在。您不能(还)将术语与布尔运算符直接组合,例如idx.search("+foo +jander +clander") ,而是指出查询中是否存在术语。默认情况下,术语具有可选的状态,但现在也可以将其标记为必需或禁止。

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

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

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

QFile::flush()