0

我已经配置了一个包含两个字段的 Elasticsearch 索引:“名称”和“类型”。当我执行下面的查询时,我没有得到任何结果,因为“演员”在“类型”字段中。

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

有什么方法可以执行包含多个单词的查询,并且即使某些单词在“名称”字段中而其他单词在“类型”字段中也能获得结果。

谢谢你的帮助!

4

2 回答 2

0

您可以尝试:

{
  "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"}},
      ]
    }
  }
}
于 2016-05-24T16:41:39.237 回答
0

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

{
  "query": {
    "multi_match": {
      "query": "johnny depp actor",
      "type": "cross_fields",
      "operator": "AND",
      "fields": [
        "name",
        "type"
      ],
      "tieBreaker": 0.7
    }
  }
}
于 2016-05-24T16:43:45.500 回答