给定两个文档,每个文档有两个字段:
1. title: United Kingdom requested meeting of United Nations
content: The United Nations will hear statements from the United Kingdom (...)
2. title: Airlines face scrutiny across nation
content: United States airline United Airlines has faced increasing (...)
我在一个Lucene查询后,它将A)匹配单词“united”的示例,但在标题或内容字段中后跟“States”或“Kingdom”时则不匹配B)重要的是,匹配两个文档,即使它们包含所需和不需要的短语。
我的第一个调用端口是spanNot()
,这意味着以包含,排除顺序接受两个spanTerm
查询,后跟一个dist
整数,以及一个指示术语是否应该按顺序排列的布尔值。例如:
spanNot(title:united, title:states, 1, true)
考虑到这一点,我已经使用BooleanQuery
链接了必要的查询,因此查询如下:
(+spanNot(title:united, title:states, 1, true) +spanNot(title:united, title:kingdom, 1, true))
(+spanNot(content:united, content:states, 1, true) +spanNot(content:united, content:kingdom, 1, true))
如您所见,上面有两组查询,逻辑上应该是这样的:(标题必须包含united但不包含united states,且标题必须包含united但不包含united kingdom)或(内容必须包含united但不包含united states,且内容必须包含united但不包含united kingdom)
从概念上讲,这对我来说是完全有意义的,但是,我发现我的查询结果--无论是初始的spanNot
还是更长的chained BooleanQuery
版本--都是不正确的。要么是整个文档不匹配,要么是每一次提到“联合”这个词都匹配--很难找出原因。
有关其他详细信息:我使用Clojure中的lucene java库实现了查询构建器,但使用Kibana的Lucene查询功能对绝对应该匹配的文档进行了查询测试。使用LuceneV7.7-可能会有升级,但我不相信这会解决我的问题。
任何见解都将受到极大的赞赏。
1条答案
按热度按时间wvmv3b1j1#
我认为,你应该使用布尔+短语查询。我不知道库中的Lucene语法(我认为你需要PhraseQuery),但对于常规请求,你可以使用以下查询: