ElasticSearch如何对筛选查询(而不是文本查询)进行排名?

时间:2014-12-16 15:35:14

标签: search elasticsearch lucene ranking tf-idf

我知道ElasticSearch使用relevance ranking algorithms,例如Lucene的tf/idf, length normalization and couple of more algorithms来对在文本字段上应用的术语查询进行排名(即搜索单词" medical" AND"期刊"标题"以及" body"字段)。

我的问题是ElasticSearch如何排名和检索过滤器或范围查询的结果(即年龄= 25,或权重> 60)?

我知道这些类型的查询只是根据条件过滤文档。但是,假设我有200个年龄字段值为25的文档。哪些文档将被检索为前10个结果?

ElasticSearch是否按照索引它们的顺序检索它们?

1 个答案:

答案 0 :(得分:3)

来自Elasticsearch文档:

Filters:作为一般规则,应使用过滤器而不是查询:

  • 用于二进制是/否搜索
  • 有关确切值的查询

Queries:作为一般规则,应使用查询代替过滤器:

  • 进行全文搜索
  • 其中结果取决于相关性得分

因此,当运行“年龄= 25,或权重> 60”等搜索时,您应该使用过滤器。

但是 - 过滤器不会影响评分 - 例如,如果您只使用过滤器,则搜索结果将具有相同的分数。

有一个range query - 这是一个会影响得分的查询,我猜它会根据文档时间戳(最近获得更高分数)之类的内容对文档进行评分。

您需要进一步探索documentation并深入了解Lucene文档,以准确了解文档如何以及为何得分 - 但如上所述,您可能更好地使用不影响评分的过滤器