elasticsearch结合了多个查询

obs*_*obs 0 elasticsearch booleanquery

我有一个弹性搜索索引,用于存储有关人员的信息.为了找到特定的人我有一些问题,每个人都可以单独工作但是当我使用Bool Query将它们组合起来时,我得到一个错误.

其中一个查询是模糊搜索名称

{
  "query": {
    "fuzzy_like_this": {
      "fields": [
        "firstname",
        "lastname"
      ],
      "like_text": "Peter"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

另一个问题是搜索出生在特定日期范围内的人

{
  "query": {
    "range": {
      "birthdate": {
        "from": "1988-12-30",
        "to": "1993-12-30"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我想结合这两个查询.我的布尔查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "query": {
            "fuzzy_like_this": {
              "fields": [
                "firstname",
                "lastname"
              ],
              "like_text": "Peter"
            }
          }
        },
        {
          "query": {
            "range": {
              "birthdate": {
                "from": "1988-12-30",
                "to": "1993-12-30"
              }
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

虽然我单独使用它们时两个查询都可以正常工作,但在组合它们时我会收到错误.在我的索引中有人名字是彼得并且出生在这个日期范围内,但即使找不到人,我也应该得到0结果而不是错误.

错误说:"error":"SearchPhaseExecutionException [无法执行阶段[查询],所有分片都失败;嵌套:QueryParsingException [[indexname]没有为[query]注册查询]

是以我想要的方式将查询与bool查询组合在一起还是我只是使用了错误的语法?

mol*_*are 7

我认为您有语法错误,query属于的查询不需要关键字must.换句话说,它应该如下:

{
  "query": {
    "bool": {
      "must": [
        {
          "fuzzy_like_this": {
            "fields": [
              "firstname",
              "lastname"
            ],
            "like_text": "Peter"
          }
        },
        {
          "range": {
            "birthdate": {
              "from": "1988-12-30",
              "to": "1993-12-30"
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有关布尔查询更多信息点击这里