不在lucene中查询

时间:2010-08-30 22:40:14

标签: indexing lucene

我不需要查询我的lucene索引。 Lucene目前不仅允许我们在查询中有两个或更多个术语:

所以我可以这样做:

country:canada not sweden

但我无法运行如下查询:

country:not sweden

如果有一个有效解决此问题的方法,请告诉我

由于

5 个答案:

答案 0 :(得分:27)

一个非常晚的回复,但以后可能对其他人有用:

*:* AND NOT country:sweden

如果我没有弄错的话,这应该对所有文件和文件与一个与“瑞典”不同的国家进行逻辑“与”。

答案 1 :(得分:5)

请检查类似question的答案。解决方案是使用MatchAllDocsQuery

答案 2 :(得分:1)

简短的回答是使用标准的Lucene是不可能的。

Lucene不允许NOT查询作为单个术语,因为它不允许前缀查询 - 执行任何一项,引擎必须查看每个文档以确定文档是否是一击。它必须查看每个文档,因为它不能使用搜索词作为在倒排索引中查找文档的键(用于存储索引文档)。

以你的情况为例:

  

要搜索not sweden,最简单(也可能是最有效)的方法是搜索sweden,然后“反转”结果集以返回不在该结果集中的所有文档。这样做需要在索引中找到所有必需的(即不在结果集中)文档,但是没有用于查找它们的键。这可以通过迭代索引中的文档来完成 - 这是一个没有优化的任务,因此速度会受到影响。

如果您确实需要此功能,则可以在建立索引时维护自己的项目列表,以便使用Lucene进行not sweden搜索成为sweden搜索,然后使用您的内容反转结果一套物品。

答案 3 :(得分:1)

好的,我明白你要做什么了。

您可以将其用作查询细化,因为Lucene中没有一元布尔运算符。尽管有上述答案,但我相信这是一种更好,更具前瞻性的方法(注意通配符前的空格):

&query= *&qf=-country:Canada

答案 4 :(得分:0)

在搜索框中尝试以下查询:

NOT message:"warning"

消息是搜索字段