elasticsearch结合了多个查询

时间:2013-12-30 14:39:49

标签: elasticsearch booleanquery

我有一个弹性搜索索引,用于存储有关人员的信息。 为了找到特定的人我有一些查询,每个人都可以单独工作,但是当我使用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结果而不是错误。

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

是否以我想要的方式将查询与bool查询相结合,或者我只是使用了错误的语法?

1 个答案:

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

有关布尔查询here

的更多信息