Elasticsearch 多字段查询

Elasticsearch Multi-field Query

我配置了一个包含两个字段的 Elasticsearch 索引:"Name" 和 "Type"。 当我执行下面的查询时,我没有得到任何结果,因为 "actor" 在 "Type" 字段中。

{
  "query": {
    "multi_match": {
      "query": "johnny depp actor",
      "operator": "AND",
      "fields": [
        "name",
        "type"
      ],
      "tieBreaker": 0.7
    }
  }
}

有什么方法可以执行包含多个词的查询,并且即使某些词在 "Name" 字段中而其他词在 "Type" 字段中也能获得结果。

感谢您的帮助!

您可以试试:

{
  "query": {
    "bool":{
      "should":[
        {"match_phrase":{"name":"johnny depp actor"}},
        {"match_phrase":{"type":"johnny depp actor"}},
        {"match_phrase":{"name":"johnny"}},
        {"match_phrase":{"name":"depp"}},
        {"match_phrase":{"name":"actor"}},
        {"match_phrase":{"type":"johnny depp actor"}},
        {"match_phrase":{"type":"johnny"}},
        {"match_phrase":{"type":"depp"}},
        {"match_phrase":{"type":"actor"}},
      ]
    }
  }
}

我终于找到了解决办法。 对于那些可能需要它的人,解决方案是使用cross-field,这样所有术语必须出现在至少一个字段中匹配文档。

{
  "query": {
    "multi_match": {
      "query": "johnny depp actor",
      "type": "cross_fields",
      "operator": "AND",
      "fields": [
        "name",
        "type"
      ],
      "tieBreaker": 0.7
    }
  }
}