我有看起来像这样的文档(以下是两个示例):
{ "id": 1234, "title": "the title", "body": "the body", "examples": [ { "evidence_source": "friend", "source_score": 15 }, { "evidence_source": "parent", "source_score": 12 } ] }
和
{ "id": 6346, "title": "new title", "body": "lots of content", "examples": [ { "evidence_source": "friend", "source_score": 10 }, { "evidence_source": "parent", "source_score": 27 }, { "evidence_source": "child", "source_score": 4 } ] }
examples数组中子文档的格式将始终具有an evidence_source和a,source_score但是这些子文档的数量将可变,每个子文档具有不同的evidence_source值。
examples
evidence_source
source_score
我想知道是否可以根据source_score与特定值匹配的值之一对这种格式的文档进行排序evidence_source。我真的很想能够做到这一点:
friend
id
parent
我做这样的事最接近的结果是1和2,但我不相信它们能达到我想要做的事情。
关于我可能如何处理的任何想法?我已经考虑过基于分别索引这些examples子文档的一些想法,但是我对Elasticsearch还是很陌生,所以我正在寻找一些有关如何以最直接的方式实现我的目标的建议(这可能是个空想) …)
更新 :elasticsearch邮件列表上的帖子似乎表明这是不可能的,但是我想知道这里的其他人是否有任何不同的想法!
在0.90中,对基于嵌套文档内部字段进行排序的支持已添加到elasticsearch中:
https://github.com/elasticsearch/elasticsearch/issues/2662
按嵌套字段排序支持在已经存在的排序选项之上具有以下参数: nested_path-定义要排序的嵌套对象。实际的排序字段必须是此嵌套对象内的直接字段。默认值为使用排序字段中最直接继承的嵌套对象。 * nested_filter-过滤器应匹配嵌套路径内的内部对象,以便通过排序将其字段值考虑在内。常见的情况是在嵌套的过滤器或查询中重复查询/过滤器。默认情况下,no nested_filter 为活动状态。
按嵌套字段排序支持在已经存在的排序选项之上具有以下参数:
nested_path
nested_filter
给定您的示例数据,以下查询应为您提供帮助:
{ "query": { "match_all": {} }, "sort": [ { "examples.source_score": { "order": "desc", "nested_path": "examples", "nested_filter": { "term": { "examples.evidence_source": "friend" } } } } ] }