如果我不关心评分,那么ElasticSearch查询中的constant_score会更快吗?

时间:2017-02-07 22:08:57

标签: elasticsearch

我向ElasticSearch发出几个查询,以便按关键字检索文档(我按代码或内部ID匹配)。我不太关心这些查询中的评分,只是检索文档。

将我在constant_score过滤器中使用的bool查询包装起来会提高性能,还是有意义?

1 个答案:

答案 0 :(得分:1)

没有意义。如果您使用bool查询,则可以对其应用过滤器。

GET /_search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }}, 
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [ 
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}

过滤器 - 子句(查询)必须出现在匹配的文档中。然而,与必须不同的是,查询的分数将被忽略。过滤器子句在过滤器上下文中执行,这意味着忽略评分并考虑使用子句进行高速缓存。

应该使用更多constant_score进行评分,因此如果匹配,请将“boost”值应用为分数。

总结:当你需要得分

时,使用filter for filter和constant_score