elasticsearch 使用Elasticsearch筛选查询的正确方法?(筛选与筛选查询)
我正在尝试找出Elasticsearch中的“过滤器”和“过滤查询”之间是否有区别 下面的两个示例请求在针对我的索引运行时返回相同的结果 他们在某些微妙的方面真的不同吗 在不同的情况下,有没有一个原因会让一个比另一个更受欢迎 DSL提供一个顶级
elasticsearch 使用Elasticsearch筛选查询的正确方法?(筛选与筛选查询),
elasticsearch,
elasticsearch,我正在尝试找出Elasticsearch中的“过滤器”和“过滤查询”之间是否有区别 下面的两个示例请求在针对我的索引运行时返回相同的结果 他们在某些微妙的方面真的不同吗 在不同的情况下,有没有一个原因会让一个比另一个更受欢迎 DSL提供一个顶级查询,和一个顶级过滤器: GET /index/type/_search?_source { "query": { "multi_match": { "query": "my dog has fleas", "field
查询
,和一个顶级过滤器
:
GET /index/type/_search?_source
{
"query": {
"multi_match": {
"query": "my dog has fleas",
"fields": ["name", "keywords"]
}
},
"filter": {
"term": {"status": 2}
}
}
DSL仅提供顶级查询,使用过滤的构造:
GET /index/type/_search?_source
{
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "my dog has fleas",
"fields": ["name", "keywords"]
}
},
"filter": {
"term": {"status": 2}
}
}
}
}
第一个示例是a,从性能角度来看,它是次优的。过滤查询是首选,因为过滤器将在查询之前运行。通常,您希望首先运行过滤器,因为评分文档比布尔通过/失败更昂贵。这样,在对结果集运行查询之前,它会被缩减。使用post_筛选器,首先运行查询,对整个结果集进行评分,然后将筛选器应用于结果
顶级filter
指令在1.0中被弃用,并被重命名为post\u filter
,以阐明其用途和用法
搜索中的顶级筛选器参数已重命名为post_filter,以指示它不应用作筛选搜索结果的主要方式(改为使用筛选查询),而仅用于在计算面/聚合后筛选结果
谢谢,克里斯,这很有帮助。