我有一个弹性搜索索引,用于存储有关人员的信息。 为了找到特定的人我有一些查询,每个人都可以单独工作,但是当我使用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查询相结合,或者我只是使用了错误的语法?
答案 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
的更多信息