我在这里关注指南https://dzone.com/articles/23-useful-elasticsearch-example-queries,下面的bool查询让我困惑:
{
"query": {
"bool": {
"must": {
"bool" : { "should": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "title": "Solr" }} ] }
},
"must": { "match": { "authors": "clinton gormely" }},
"must_not": { "match": {"authors": "radu gheorge" }}
}
}
}
根据教程,查询的解释是:
在标题中搜索带有“Elasticsearch”或“Solr”字样的图书, AND由“clinton gormley”撰写,但不是由“radu”撰写的 gheorge”
我的问题是,在bool查询中有3个条件但也有3个逻辑运算符(必须,必须,must_not)而不是2.我的理解是3个条件应该只有2个逻辑运算符,如COND1 AND COND2 AND !COND3
。
我在这里缺少什么?
答案 0 :(得分:1)
该查询错误且不起作用,不可能有两个bool/must
子句,它们必须合并如下:
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"match": {
"title": "Elasticsearch"
}
},
{
"match": {
"title": "Solr"
}
}
]
}
},
{
"match": {
"authors": "clinton gormley"
}
}
],
"must_not": {
"match": {
"authors": "radu gheorge"
}
}
}
}
}
bool/should
条款埋在bool/must
内的原因是authors
上的匹配比title
上的两个匹配更重要