我想构建一个 Lucene 查询,它只匹配具有我指定的术语的文档:不多也不少。 “不少”部分很简单:一个 BooleanQuery所有强制性条款。但是,我不确定如何做“不再”部分。本质上,我需要的是一个查询,它表示“结果文档不能包含我在查询中指定的内容以外的任何术语。”有任何想法吗?谢谢!
最佳答案
我认为你可以按如下方式解决这个问题:
- 您需要创建一个分析器来提取标记、删除重复项,然后按某种顺序(例如字典顺序)连接它们。因此,如果您有三个文件:
doc1: "lorem ipsum", doc2: "lorem ipsum dolor", doc3: "lorem ipsum lorem"
它将为它们产生以下值
doc1: "ipsum lorem", doc2: "dolor ipsum lorem", doc3: "ipsum lorem"
- 然后创建一个由该分析器填充的字段
- 最后,将此分析器应用于您的查询并匹配此特殊字段。因此,您将用于查询“lorem ipsum”的唯一查询词是“ipsum lorem”
实现此目的的代码太长,无法放入答案中,但我希望您能理解总体思路——创建一个您可以完全匹配的字段。
关于Lucene 精确匹配查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348789/