【问题标题】:Join queries from different indexes on Elasticsearch在 Elasticsearch 上加入来自不同索引的查询
【发布时间】:2016-12-16 06:55:37
【问题描述】:

我正在使用 ES 5。在 C# 上使用 Nest lib。

我在 ES 上有两个索引。一个有联系信息,另一个有联系事件。我系统中的每个客户都可以有很多联系人,每个联系人都可以触发更多的事件。几乎每个联系动作都是一个事件。

我在“联系人”索引中拥有所有联系信息,在“事件”索引中拥有我的所有活动信息。

所以我有一个可以按联系信息和事件过滤的搜索。我遇到的问题是如何在一个搜索中加入两个搜索,一个用于联系人,一个用于事件。

现在我有两个查询,首先我获取匹配的联系人,然后在事件中搜索这些联系人 ID。问题是第一次搜索可以返回数以千计的联系人 id,我需要将所有这些都提供给第二次搜索。

有没有更好的方法来做到这一点?或者我应该重新考虑我的索引,例如将联系人和事件存储在一起并使用父/子策略?

【问题讨论】:

  • 您查询的最终目标是什么?要获取与搜索查询匹配的联系人的所有事件?
  • 最终的目标是获取联系人,但是很多联系人信息是保存为事件的,几乎是每个联系人的动作。因此,搜索需要匹配姓名、姓氏等联系信息和联系事件,例如他们是否看到电子邮件、导航到页面等。

标签: c# elasticsearch nest


【解决方案1】:

是的,您需要选择将数据存储在一个索引中还是使用父子模式,第一种方式更快,第二种方式在您有很多事件并经常添加新事件时更方便。不过,最好不要为您在单个查询中提到的数千个联系人获取所有事件,而是使用滚动 API 并在处理数据时获取数据。

【讨论】:

    猜你喜欢
    • 2022-07-02
    • 2022-01-27
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多