用于嵌套查询的 ElasticSearch 相邻词

ElasticSearch adjacent words for nested queries

我正在使用 ES 7.14/Kibana 7.10,我必须搜索相邻的词(任何顺序),因此我正在使用此查询:

{
 "query":{
    "bool":{
        "must":[
            {
                "query_string":{
                    "query":"*antonio* *banderas*",
                    "fields":[
                        "text"
                    ],
                    "default_operator":"and",
                }
            }]
      }
  }
}

这适用于 text 普通字段。现在,我有一个嵌套字段 metadata,假设映射是

{
    "mappings:": {
        "properties": {
            "text": {
                "type": "text"
            },
            "metadata": {
                "type": "nested",
                "properties": {
                    "text": {
                        "type": "text"
                    }
                }
            }
        }
    }
}

并且我想以相同的方式搜索嵌套字段(相邻词搜索),因此假设可以用 方式为 query_string 编写嵌套查询

{
  "query": {
    "query_string": {
      "query": "metadata.text:*antonio* *banderas*"
    }
  }
}

如何使这种方法适用于 default_operator=and 等之前的方法?如果我这样做

   {
      "query": {
        "query_string": {
          "query": "metadata.text:*antonio* *banderas*",
          "default_operator": "and"
        }
      }
    }

我没有得到任何结果(但也有任何错误)。

一个类似的问题是

不应使用 query_string 搜索任何顺序的相邻单词,而是 wildcardmatchtermspan_term

还有一种映射类型 wildcard 针对此用途进行了优化,具体取决于您需要的查询类型。

所以给你第一个例子:

{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "text": "*antonio*"
          }
        },
        {
          "wildcard": {
            "text": "*banderas*"
          }
        }
      ]
    }
  }
}

{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "text": "*antonio*banderas*"
          }
        }
      ]
    }
  }
}

对于嵌套查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "metadata",
            "query": {
              "bool": {
                "must": [
                  {
                    "wildcard": {
                      "metadata.text": "*antonio*"
                    }
                  },
                  {
                    "wildcard": {
                      "metadata.text": "*banderas*"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}