一尘不染

elasticsearch的Query DSL中must和filter有什么区别?

elasticsearch

我是elasticsearch的新手,在must和filter之间感到困惑。我想在条款之间执行and操作,所以我这样做了

开机自检/ xyz / _search

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "city": "city1"
                    }
                },
                {
                    "term": {
                        "saleType": "sale_type1"
                    }
                }
            ]
        }
    }
}

这给了我所需的结果,既匹配了术语,又使用了像这样的过滤器

开机自检/ xyz / _search

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "city": "city1"
                    }
                }
            ],
            "filter": {
                "term": {
                    "saleType": "sale_type1"
                }
            }
        }
    }
}

我得到相同的结果,所以什么时候应该使用must以及什么时候应该使用filter?有什么区别?


阅读 4274

收藏
2020-06-22

共1个答案

一尘不染

must有助于得分。在中filter,查询的分数将被忽略。

must和中filter,子句(查询)必须出现在匹配的文档中。这就是获得相同结果的原因。

您可以检查此链接

得分

每个文档的相关性得分由正浮点数(称为)表示_score。越高_score,文档越相关。

查询子句_score为每个文档生成一个。

要知道如何计算分数,请参考此链接

2020-06-22