【发布时间】:2013-05-23 21:59:47
【问题描述】:
我的文件看起来像这样(这里有两个例子):
{
"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 数组中的子文档的格式总是有一个evidence_source 和一个source_score,但是这些子文档的数量是可变的,每个都有不同的evidence_source 值。
我想知道是否可以根据与特定evidence_source 值匹配的source_score 值之一对具有这种格式的文档进行排序。我真的很想能够做到这一点:
- 按
source_score降序对文档进行排序,其中相关的evidence_source为friend。文档ids 的结果排序将是 1234,6346。 - 按
source_score降序对文档进行排序,其中相关的evidence_source为parent。文档ids 的结果排序将是 6346,1234。
我为执行此类操作得出的最接近结果是 1 和 2,但我不相信它们完全符合我的要求。
有什么想法可以解决这个问题吗?我已经考虑了一些基于分别索引这些examples 子文档的想法,但我对弹性搜索相当陌生,所以我正在寻找一些关于如何以最直接的方式实现我的目标的建议(这可能是白日梦……)
更新:elasticsearch mailing list 上的帖子似乎表明这是不可能的,但我想知道这里的其他人是否有任何不同的想法!
【问题讨论】:
-
子文档是映射为嵌套文档还是对象?您希望索引中有多少条记录?
-
现在,我实际上并没有专门对它们进行映射,但我愿意尝试使用不同的映射来实现我正在寻找的功能。我预计总共存储了 1 亿条记录。
-
您计划拥有多少种不同类型的 evidence_source?
-
介于 5 到 10 之间,并不是每个文档都有完全相同的 evidence_source 块。
-
我只是想这可能会更容易,如果您通过将证据类型移动到字段名称中来修改架构:“examples”:{“friend”:{“source_score”:10},“parent” : {"source_score": 27}, "child": {"source_score": 4}}
标签: elasticsearch