首页 > 解决方案 > match_phrase 查询在一个查询中运行多个

问题描述

我正在尝试使用来自我的弹性的查询来获取与“ListExperiences.Title”匹配的一些详细信息

{
   "size": 100,
   "query": {
       "match_phrase": {
                "ListExperiences.Title": "technical specialist"
            }
   },
   "_source":["skillstop"]
}

我能够成功执行并得到所需的结果。

{...
 "hits":[{
    ...
    "_source":{"skillstop": "government, active directory"
     } }       
 ]}

hits 的长度 = 1,因为我只进行了查询。但是如果我想跑这样五个头衔,例如:“支持专家”、“技术专家”、“技术专家”、“客户服务代表”,我必须运行弹性搜索 5 次。

有什么方法可以一次全部运行吗?(期望我得到点击长度= 5)

我试过这样

{
 "size": 100,
 "query": {
    "dis_max":{
        "queries":[
            {"match_phrase": {
                "ListExperiences.Title": "technical specialist"} },
            {"match_phrase": {
                "ListExperiences.Title": "technical expert"} }
        ]
    }
}
}

它只返回“技术专家”或最后一位。

标签: elasticsearch

解决方案


这取决于。如果你想启动一个 or 查询,你应该尝试:

{
  "query" : {
    "bool" : {
      "should": [{
        "match_phrase": {
          "ListExperiences.Title": "technical specialist"
        }
      }, {
        "match_phrase": {
          "ListExperiences.Title": "technical expert"
        }
      }]
    }
  }
}

如果你想只用一个 POST 请求进行多个查询,你应该使用multi_search- doc here

GET <your_index_name>/_msearch
{"query" : {"match_phrase" : {"ListExperiences.Title": "technical specialist"}}}
{"query" : {"match_phrase" : {"ListExperiences.Title": "technical expert"}}}

推荐阅读