Elasticsearch多字段查询

时间:2016-05-24 16:14:24

标签: elasticsearch elasticsearch-query

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

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

是否可以使用多个单词执行查询,并且即使某些单词位于“名称”字段中而其他单词位于“类型”字段中,也可以获得结果。

谢谢你的帮助!

2 个答案:

答案 0 :(得分: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"}},
      ]
    }
  }
}

答案 1 :(得分:0)

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

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