Shi*_*vam 5 apache lucene elasticsearch
我对 ElasticSearch Query DSL 的查询上下文和过滤器上下文有点困惑。我有以下 2 个疑问。两个查询返回相同的结果,第一个查询评估分数,第二个查询不评估分数。哪一个更合适?
第一个查询:-
curl -XGET 'localhost:9200/xxx/yyy/_search?pretty' -d'
{
"query": {
"bool": {
"must": {
"terms": { "mcc" : ["5045","5499"]}
},
"must_not":{
"term":{"maximum_flag":false}
},
"filter": {
"geo_distance": {
"distance": "500",
"location": "40.959334, 29.082142"
}
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
第二个查询:-
curl -XGET 'localhost:9200/xxx/yyy/_search?pretty' -d'
{
"query": {
"bool" : {
"filter": [
{"term":{"maximum_flag":true}},
{"terms": { "mcc" : ["5045","5499"]}}
],
"filter": {
"geo_distance": {
"distance": "500",
"location": "40.959334, 29.082142"
}
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
谢谢,
官方指南里有很好的解释:
\n\n\n\n\n查询上下文
\n\n查询上下文中使用的查询子句回答问题 \xe2\x80\x9c 该文档与该查询子句的匹配程度如何?\xe2\x80\x9d 除了确定文档是否匹配之外,查询子句还计算一个表示匹配程度的 _score该文档相对于其他文档匹配。
\n\n每当查询子句传递给查询参数(例如搜索 API 中的查询参数)时,查询上下文就会生效。
\n\n过滤上下文
\n\n在过滤器上下文中,查询子句回答问题 \xe2\x80\x9c此文档是否与此查询子句匹配?\xe2\x80\x9d 答案是简单的“是”或“否”\xe2\x80\x89\xe2\x80\x94\ xe2\x80\x89不计算分数。过滤器上下文主要用于过滤结构化数据,例如
\n\n此时间戳是否在 2015 到 2016 范围内?\n 状态字段是否设置为“已发布”?\n Elasticsearch 将自动缓存常用的过滤器,以提高性能。
\n\n每当查询子句传递给过滤器参数(例如 bool 查询中的 filter 或must_not 参数、constant_score 查询中的过滤器参数或过滤器聚合)时,过滤器上下文就会生效。
\n
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-filter-context.html
\n\n关于您的情况,我们需要更多信息,但考虑到您正在寻找精确的值,过滤器会更适合它。
\n| 归档时间: |
|
| 查看次数: |
6141 次 |
| 最近记录: |