Kibana SpanNot Lucene查询过于严格或过于宽松

0ve6wy6x  于 2023-05-11  发布在  Kibana
关注(0)|答案(1)|浏览(252)

给定两个文档,每个文档有两个字段:

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-可能会有升级,但我不相信这会解决我的问题。
任何见解都将受到极大的赞赏。

wvmv3b1j

wvmv3b1j1#

我认为,你应该使用布尔+短语查询。我不知道库中的Lucene语法(我认为你需要PhraseQuery),但对于常规请求,你可以使用以下查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "filter": [
              {
                "match": {
                  "title": "united"
                }
              }
            ],
            "must_not": [
              {
                "match_phrase": {
                  "title": "United Kingdom"
                }
              },
              {
                "match_phrase": {
                  "title": "United States"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "filter": [
              {
                "match": {
                  "content": "united"
                }
              }
            ],
            "must_not": [
              {
                "match_phrase": {
                  "content": "United Kingdom"
                }
              },
              {
                "match_phrase": {
                  "content": "United States"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

相关问题