elasticsearch - 通过多个属性限制结果

标签 elasticsearch

我有记录,版本,标题和过期字段的数据。
记录是一个非唯一字段,每个记录可以有多个版本。

在搜索结果中,我只需要显示每个版本之一。

因此,可以按标题搜索特定日期/之前的文章,但每个版本只返回一个结果。

例如,给定此数据:

{"record": 1, "version": 1, "title": "Hello", "expires": "2011-08-17 00:00:00"},
{"record": 1, "version": 2, "title": "Hello", "expires": "2012-08-17 00:00:00"},
{"record": 2, "version": 1, "title": "Hello world", "expires": "2010-08-17 00:00:00"},
{"record": 2, "version": 2, "title": "Hello world", "expires": "2011-08-17 00:00:00"},
{"record": 2, "version": 3, "title": "Hello world", "expires": "2012-08-17 00:00:00"},

搜索标题中包含“Hello”且在2012-08-18之前或之前过期的文档,应返回:
{"record": 1, "version": 2, "title": "Hello", "expires": "2012-08-17 00:00:00"},
{"record": 2, "version": 3, "title": "Hello world", "expires": "2012-08-17 00:00:00"}

(每条记录的最新“版本”)。

有任何想法吗?

我是否需要遍历ES之外的结果?
谢谢阅读!

最佳答案

您想要的称为字段折叠,它是Apache Solr拥有而ElasticSearch却没有的少数几个功能之一。

http://wiki.apache.org/solr/FieldCollapsing

ElasticSearch中对此功能有很多要求,但尚未实现。

关于elasticsearch - 通过多个属性限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18294240/

相关文章:

elasticsearch - Elasticsearch 查询不仅可以识别结果,还可以突出显示满足特定属性的项目

elasticsearch 自定义标记器 - 按长度拆分标记

elasticsearch - Logstash-ElasticSearch中的聚合

javascript - 来自 Apollo GraphQL 客户端的 Elasticsearch 查询的大小始终为十

elasticsearch - 错误 : index_not_found_exception

elasticsearch - Pod 卡在 "Terminating"状态

elasticsearch - 如何通过Java API从ElasticSearch删除数据

search - 返回 Elasticsearch 中每个聚合命中的第一个 'term'

javascript - 将elasticsearch js 与bluebird 结合起来

elasticsearch - 我可以将下面的mysql查询更改为elasticsearch dsl吗?