在 ElasticSearch 中管理关系的最佳方式是什么?

What is the best way to manage relations in ElasticSearch?

抱歉,如果有人问过这个问题,但我找不到关于这个问题的明确答案。

我在创建 elasticsearch 索引时遇到了问题,我不太确定如何正确管理关系。

假设我有以下实体:

我愿意:

我找不到我是否应该执行多个查询、嵌套对象、parent/children 关系等...我找不到合适的教程 "do it that way" .

实际上我正在使用嵌套对象,但我发现在我的每个类型中重新定义我需要的所有数据非常麻烦。

你对此有什么建议吗?

谢谢。

嵌套结构或父子关系是最好的选择。我希望这篇 blog 能有所帮助。

在 Elasticsearch 中搜索和建模关系的关键是去规范化。这是因为 Lucene 有一个平面数据模型,没有对数据关系的内置支持。

从搜索结果的角度考虑。正在寻找的东西是什么?您的搜索结果中显示了什么?那就是你正在寻找的东西。如果你想根据相关对象中的值过滤或排序这些东西,那么你需要在索引时提取这些值。

如果您要搜索衬衫并希望按颜色过滤,那么您的衬衫文档中应该都有一个 color 字段。如果您正在搜索图书并希望过滤到某个供应商,那么您应该在图书文档中将供应商名称或 ID 作为一个字段包含在内。

您选择的语言和 ES 客户端可能会使这更容易。例如,在 Ruby 中,您可以索引任意方法调用的结果,允许您在索引数据的同时动态地从其他关联模型中获取数据。