elasticsearch,lucene,Apache,elasticsearch,Lucene" /> elasticsearch,lucene,Apache,elasticsearch,Lucene" />

Apache Elasticsearch查询上下文与筛选器上下文

Apache Elasticsearch查询上下文与筛选器上下文,apache,elasticsearch,lucene,Apache,elasticsearch,Lucene,我对ElasticSearchQueryDSL的查询上下文和过滤器上下文有点困惑。我有以下两个问题。两个查询返回相同的结果,第一个查询评估分数,第二个查询不评估分数。哪一个更合适 第一个问题:- curl -XGET 'localhost:9200/xxx/yyy/_search?pretty' -d' { "query": { "bool": { "must": { "terms": { "mcc" : ["5045","5499"]}

我对ElasticSearchQueryDSL的查询上下文和过滤器上下文有点困惑。我有以下两个问题。两个查询返回相同的结果,第一个查询评估分数,第二个查询不评估分数。哪一个更合适

第一个问题:-

 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"
         }                                   
       }
     }
   }
 }'
第二个问题:-

 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"
         }                                   
       }
     }
   }
 }'

谢谢,

在官方指南中,您有一个很好的解释:

查询上下文

查询上下文中使用的查询子句回答了“此文档与此查询子句的匹配程度如何?”的问题。除了确定文档是否匹配外,查询子句还计算表示文档与其他文档匹配程度的_分数

只要将查询子句传递给查询参数(例如搜索API中的查询参数),查询上下文就会生效

筛选上下文

在筛选上下文中,查询子句回答问题“此文档是否与此查询子句匹配?”答案是简单的“是”或“否” — 不计算分数。筛选器上下文主要用于筛选结构化数据,例如

该时间戳是否属于2015年至2016年的范围? 状态字段是否设置为“已发布”? 经常使用的过滤器将由Elasticsearch自动缓存,以提高性能

每当将查询子句传递给筛选器参数(例如布尔查询中的筛选器或must\u not参数、常量\u score查询中的筛选器参数或筛选器聚合)时,筛选器上下文都有效

关于您的情况,我们需要更多信息,但考虑到您正在寻找准确的值,过滤器将更适合您。

这可能会有所帮助!