弹性:搜索两个术语,一个在_all上,另一个在一个场上

时间:2016-12-01 14:36:18

标签: elasticsearch

我想在整个文档中混合搜索(例如"开发人员")以及在某个字段上搜索另一个字段(例如" php")。 我可以单独进行每次搜索,但我无法混合它们。

这是我的例子(简化为仅显示我的问题):

{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "_all": "developer"
        },
        "multi_match": {
          "query": "php",
          "fields": [
            "skills.description",
            "skills.description",
            "skills.details"
          ],
          "operator": "or",
          "type": "most_fields"
        }
      }
   }
}

如果我运行此示例,则会出现错误:

Parse Failure [Failed to parse source

有没有办法用两个术语搜索_all和特定字段?

感谢。

1 个答案:

答案 0 :(得分:1)

是的,您几乎就在那里,您需要将它们合并到一个bool/must查询中:

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "_all": "developer"
              }
            },
            {
              "multi_match": {
                "query": "php",
                "fields": [
                  "skills.description",
                  "skills.description",
                  "skills.details"
                ],
                "operator": "or",
                "type": "most_fields"
              }
            }
          ]
        }
      }
    }
  }
}