0

我有一个用于存储人员信息的弹性搜索索引。为了找到特定的人,我有一些查询,他们每个人都单独工作,但是当我使用 Bool Query 组合它们时,我得到一个错误。

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

{
  "query": {
    "fuzzy_like_this": {
      "fields": [
        "firstname",
        "lastname"
      ],
      "like_text": "Peter"
    }
  }
}

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

{
  "query": {
    "range": {
      "birthdate": {
        "from": "1988-12-30",
        "to": "1993-12-30"
      }
    }
  }
}

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

{
  "query": {
    "bool": {
      "must": [
        {
          "query": {
            "fuzzy_like_this": {
              "fields": [
                "firstname",
                "lastname"
              ],
              "like_text": "Peter"
            }
          }
        },
        {
          "query": {
            "range": {
              "birthdate": {
                "from": "1988-12-30",
                "to": "1993-12-30"
              }
            }
          }
        }
      ]
    }
  }
}

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

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

是否以我想要的方式组合查询,而不是使用 bool 查询,或者我只是使用了错误的语法?

4

1 回答 1

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"
            }
          }
        }
      ]
    }
  }
}

有关布尔查询的更多信息在这里

于 2013-12-30T15:07:31.390 回答