在弹性搜索中查询DSL中必须和过滤器之间有什么区别?

时间:2017-04-11 14:37:18

标签: elasticsearch filter querydsl

我是弹性搜索的新手,我在必须和过滤器之间感到困惑。我想在我的条款之间执行和操作,所以我做了这个

POST / xyz / _search

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

给了我匹配这两个术语的所需结果,以及使用像这样的过滤器

POST / xyz / _search

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

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

1 个答案:

答案 0 :(得分:39)

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

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

您可以查看此link

  

得分

     

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

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

要了解如何计算分数,请参阅此link