我很好奇是否有办法查询ElasticSearch,以便它返回各种各样的最佳结果。例如,让我们假装我们有一些用户在写推文,
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
更常见)编写提及“鸟”的推文,搜索“鸟”将永远不会出现奥利弗勋爵的推文,即使主奥利弗的推文得分相当高。
这是一个问题,因为[在这个假设的例子中],我想要表现出来自不同用户的结果。目前的一个解决方案是在眼睛颜色上添加方面,
facets:
eye_color:
terms: {"field": "user_eye_color"}
然后执行多次筛选搜索。然而,这似乎效率很低。
问题:ElasticSearch中是否有任何方法可以返回多个结果集,方法是返回不同方面的顶级结果(在本例中为user_eye_color=amber-green
),编写有状态的自定义评分函数,或任何其他创造性的解决方案?
我想要这样做的理由是,有时很难在所有搜索结果上输入总订单(浮点数)。假设所有amber-green
眼睛颜色用户恰好是猫,并且他们编写不同类型的文档(推文)。我想要帕累托最优的文档 - 那些在X
- 眼睛颜色类别中最优的文档,而不是试图强制所有猫写文档与所有文档的总顺序。然后,我可以做更明智的后过滤,例如,如果没有什么好的话,丢弃猫写的文件,否则做一些明智的结果交错。某种分数乘数[基于眼睛颜色]的下降可能效果不佳。
如果您不喜欢我的玩具示例(或其低调讽刺),请考虑您的索引具有不同文档类型的情况,例如推文和FBI报告......