在 Elasticsearch 上连接来自不同索引的查询
Join queries from different indexes on Elasticsearch
我正在使用 ES 5。使用 C# 上的 Nest 库。
我在 ES 上有两个索引。一个有联系信息,另一个有联系事件。我系统中的每个客户都可以有很多联系人,每个联系人都可以触发更多的事件。几乎每个接触动作都是一个事件。
我的所有联系人信息都在 "Contact" 索引中,我所有的活动信息都在 "Event" 索引中。
所以我有一个可以按联系信息和事件过滤的搜索。我遇到的问题是如何在一次搜索中加入两个搜索,一个用于联系人,一个用于事件。
现在我有两个查询,首先我得到匹配的联系人,然后我搜索这些联系人 ID 的事件。问题是第一次搜索可以 return 千个联系人 ID,我需要用所有这些来提供第二次搜索。
有更好的方法吗?或者我应该重新考虑我的索引,例如将联系人和事件存储在一起并使用 parent/child 策略?
是的,您需要在将数据存储在一个索引中或使用父子架构之间做出选择,第一种方式更快,当您有很多事件并且经常添加新事件时,第二种方式更方便。不过,最好不要为您在单个查询中提到的数千个联系人获取所有事件,而是使用滚动 API 并在处理数据时获取数据。
我正在使用 ES 5。使用 C# 上的 Nest 库。
我在 ES 上有两个索引。一个有联系信息,另一个有联系事件。我系统中的每个客户都可以有很多联系人,每个联系人都可以触发更多的事件。几乎每个接触动作都是一个事件。
我的所有联系人信息都在 "Contact" 索引中,我所有的活动信息都在 "Event" 索引中。
所以我有一个可以按联系信息和事件过滤的搜索。我遇到的问题是如何在一次搜索中加入两个搜索,一个用于联系人,一个用于事件。
现在我有两个查询,首先我得到匹配的联系人,然后我搜索这些联系人 ID 的事件。问题是第一次搜索可以 return 千个联系人 ID,我需要用所有这些来提供第二次搜索。
有更好的方法吗?或者我应该重新考虑我的索引,例如将联系人和事件存储在一起并使用 parent/child 策略?
是的,您需要在将数据存储在一个索引中或使用父子架构之间做出选择,第一种方式更快,当您有很多事件并且经常添加新事件时,第二种方式更方便。不过,最好不要为您在单个查询中提到的数千个联系人获取所有事件,而是使用滚动 API 并在处理数据时获取数据。