弹性搜索组合了多个查询



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

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

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

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

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

现在我想把这两个查询合并起来。我的bool查询:

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

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

错误显示:"error":"SearchPhaseExecutionException[执行phase[query]失败,所有碎片失败;嵌套:QueryParsingException[[indexname]没有为[query]]注册查询

组合查询是我想要的方式不可能与bool查询结合,还是我只是使用了错误的语法?

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

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

有关布尔查询的更多信息,请点击此处

最新更新