我很好奇是否有办法查询 ElasticSearch,以便它返回各种 fascets 的最佳结果。例如,假设我们有一些用户在写推文,
user: kimchy
user_eye_color: blue
tweet: elasticsearch training early bird discounts
# Lots of other message from blue eye color users mentioning 'bird'
user: lord_oliver
user_eye_color: amber-green
tweet: vanquished and consumed the twitter bird. today is a good day.
如果有足够多的blue
眼睛用户(或比 更常见的其他颜色amber-green
)在推文中提到“鸟”,则搜索“鸟”将永远不会出现 Oliver 勋爵的推文,即使 Oliver 勋爵的推文得分相当高。
这是一个问题,因为 [在这个假设的例子中],我想展示来自不同用户的结果。当前的一种解决方案是在眼睛颜色上添加刻面,
facets:
eye_color:
terms: {"field": "user_eye_color"}
然后执行多个过滤搜索。然而,这似乎相当低效。
问题user_eye_color=amber-green
:在ElasticSearch中是否有任何方法可以返回多个结果集,或者通过从不同方面(在本例中为
我为什么要这样做的理由是有时很难对所有搜索结果进行总排序(浮点分数)。假设所有amber-green
眼睛颜色的用户碰巧都是猫,他们写了不同类型的文档(推文)。与其试图强制所有 cat 编写的文档与所有文档完全一致,我想要帕累托最优文档——那些在X
-eye-color 类别中最优的文档。然后我可以做更明智的后过滤,例如,如果没有什么好东西,就丢弃 cat 编写的文档,否则对结果进行某种明智的交错。降低某种分数乘数 [基于眼睛颜色] 可能不太有效。
如果您不喜欢我的玩具示例(或其卑鄙的讽刺),请考虑您拥有具有不同文档类型的索引的情况,例如推文和 FBI 报告...