为什么我的Elasticsearch查询检索所有索引文档

时间:2019-02-12 09:34:16

标签: elasticsearch

我很难理解以下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查询时,我只得到了实际匹配的文档。这就是为什么我有点惊讶。

1 个答案:

答案 0 :(得分:1)

您缺少minimum_should_match

    "bool" : {
        "minimum_should_match": 1,            <--- add this
        "should" : [
           ...