我很难理解以下Elasticsearch(ES 6.4)查询的功能:
{
"query" : {
"bool" : {
"should" : [
{
"match" : {
"title" : {
"query" : "example",
"operator" : "AND",
"boost" : 2
}
}
},
{
"multi_match" : {
"type" : "best_fields",
"query" : "example",
"operator" : "AND",
"fields" : [
"author", "content", "tags"
],
"boost" : 1
}
}
],
"must" : [
{
"range" : {
"dateCreate" : {
"gte" : "2000-01-01T00:00:00+0200",
"lte" : "2019-02-12T23:59:59+0200"
}
}
},
{
"term" : {
"client" : {
"value" : "test",
"boost" : 1
}
}
}
]
}
},
"size" : 10,
"from" : 0,
"sort" : [
{
"_score" : {
"order" : "desc"
}
}
]
}
查询已成功执行,但检索了大约40万个文档,这是我的索引总数。这意味着所有文档都在结果集中。但为什么?这真的是multi_match查询的正确行为吗?
当我仍在使用query_string查询时,我只得到了实际匹配的文档。这就是为什么我有点惊讶。
答案 0 :(得分:1)
您缺少minimum_should_match
:
"bool" : {
"minimum_should_match": 1, <--- add this
"should" : [
...