ElasticSearch - 有没有什么方法可以检索多个结果集,或者为fascets提供最佳结果?

时间:2012-12-31 07:03:29

标签: full-text-search elasticsearch

我很好奇是否有办法查询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报告......

1 个答案:

答案 0 :(得分:3)

现在可以使用top hits aggregation完成。