如果Elasticsearch中的"过滤器"和"过滤后的查询"之间存在差异,我正在尝试解决问题.
下面的两个示例请求在针对我的索引运行时返回相同的结果.
它们在某些微妙的方面实际上是不同的吗?
在不同的情况下,为什么人会优先于另一个?
DSL给一个顶层query,和一个顶层filter:
GET /index/type/_search?_source
{
"query": {
"multi_match": {
"query": "my dog has fleas",
"fields": ["name", "keywords"]
}
},
"filter": {
"term": {"status": 2}
}
}
Run Code Online (Sandbox Code Playgroud)
DSL 只query使用filtered构造提供顶级:
GET /index/type/_search?_source
{
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "my dog has fleas",
"fields": ["name", "keywords"]
}
},
"filter": {
"term": {"status": 2}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ald 12
第一个示例是post_filter,从性能角度来看,它是次优的.首选过滤查询,因为过滤器将在查询之前运行.通常,您希望首先运行过滤器,因为评分文档比布尔传递/失败更昂贵.这样,在对其运行查询之前,会减少结果集.使用post_filter,首先运行查询,对整个结果集进行评分,然后将过滤器应用于结果.
顶级filter指令在1.0中已弃用,并已重命名post_filter为阐明其用途和用法.
搜索中的顶级过滤器参数已重命名为post_filter,表示不应将其用作过滤搜索结果的主要方式(改为使用过滤后的查询),而仅用于过滤结果后计算构面/聚合.
http://www.elastic.co/guide/en/elasticsearch/reference/current/_search_requests.html
| 归档时间: |
|
| 查看次数: |
6316 次 |
| 最近记录: |