Lucene精确匹配查询

Lucene精确匹配查询,lucene,match,Lucene,Match,我想构造一个Lucene查询,它只匹配与我指定的术语完全匹配的文档:不更少,也不更多。“不少于”部分很简单:一个包含所有强制性条款的框架。然而,我不知道如何做“不再”部分。本质上,我需要的是一个查询,它说“结果文档不能有我在查询中指定的以外的任何术语。”有什么想法吗?谢谢 我认为您可以按如下方式处理此问题: 您需要创建一个分析器,该分析器将提取令牌,删除重复项,然后按某种顺序连接它们(例如,字典)。因此,如果您有三个文档: doc1:“lorem ipsum”,doc2:“lorem ips

我想构造一个Lucene查询,它只匹配与我指定的术语完全匹配的文档:不更少,也不更多。“不少于”部分很简单:一个包含所有强制性条款的框架。然而,我不知道如何做“不再”部分。本质上,我需要的是一个查询,它说“结果文档不能有我在查询中指定的以外的任何术语。”有什么想法吗?谢谢

我认为您可以按如下方式处理此问题:

  • 您需要创建一个分析器,该分析器将提取令牌,删除重复项,然后按某种顺序连接它们(例如,字典)。因此,如果您有三个文档:
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”

实现这一点的代码太长,无法包含在答案中,但我希望您能得到一般的想法——创建一个可以完全匹配的字段。

您所说的“查询中指定的字段以外的任何字段”是什么意思?你是说“条款”?对不起,是的。因此,如果我有一个名为“string”的字段的文档,文档a的值为“mystring1”和“mystring2”,而文档B的值为“mystring1”,那么使用文档B进行查询不会返回文档a,因为文档a有“mystring2”,而文档B没有。