根据 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"}
提前感谢您的任何输入。
您提到的拉取请求已在 2.2.0 版中合并并发布。
伦尔称这个术语为存在。您(还(不能直接将项与布尔运算符组合在一起,例如 foo AND bar
,而是指示查询中存在术语。默认情况下,术语具有可选状态,但现在也可以将其标记为必需或禁止。
用于搜索的文档(指南、api(已更新,但对于您的特定示例,您可以将查询表述为:
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 })
})