【发布时间】:2011-12-22 03:05:04
【问题描述】:
我知道Lucene documentation 说
注意:NOT 运算符不能只与一个术语一起使用。例如, 以下搜索将不返回任何结果:
不是“雅加达阿帕奇”
但是,我希望能够形成一个查询,该查询返回所有不包含术语的文档。我曾考虑将MatchAllDocsQuery 和TermQuery 串在一起成为BooleanQuery,但我似乎找不到合适的组合。
如果我索引以下两个文档
Doc0: content:The quick brown fox jumps over the lazy dog.
Doc1: (empty string)
当我只需要一个文档时,查询 *:* -content:fox 会返回两个文档。
this StackOverflow answer 建议的 RegexQuery content:^((?!fox).)*$ 返回一个文档,但它似乎无法正常工作,因为 content:^((?!foo).)*$ 在我期望它返回两个文档时也返回一个文档。
我知道我想做的事情对性能的影响。查询只会在几个文档上运行,所以我不太担心性能。
有没有办法编写一个 Lucene 查询来得到我想要的?
【问题讨论】: