在 ElasticSearch 中管理关系的最佳方式是什么?
What is the best way to manage relations in ElasticSearch?
抱歉,如果有人问过这个问题,但我找不到关于这个问题的明确答案。
我在创建 elasticsearch 索引时遇到了问题,我不太确定如何正确管理关系。
假设我有以下实体:
- 产品
- 编号
- 参考
- 预订
- 编号
- 姓名
- product_id
- 衬衫
- 编号
- 颜色
- product_id
- 库存物品
- 编号
- supplier_id
- product_id
- 数量
我愿意:
- 根据颜色找出一件衬衫
- 查找 supplier_id 5
给出的所有书籍
我找不到我是否应该执行多个查询、嵌套对象、parent/children 关系等...我找不到合适的教程 "do it that way" .
实际上我正在使用嵌套对象,但我发现在我的每个类型中重新定义我需要的所有数据非常麻烦。
你对此有什么建议吗?
谢谢。
嵌套结构或父子关系是最好的选择。我希望这篇 blog 能有所帮助。
在 Elasticsearch 中搜索和建模关系的关键是去规范化。这是因为 Lucene 有一个平面数据模型,没有对数据关系的内置支持。
从搜索结果的角度考虑。正在寻找的东西是什么?您的搜索结果中显示了什么?那就是你正在寻找的东西。如果你想根据相关对象中的值过滤或排序这些东西,那么你需要在索引时提取这些值。
如果您要搜索衬衫并希望按颜色过滤,那么您的衬衫文档中应该都有一个 color
字段。如果您正在搜索图书并希望过滤到某个供应商,那么您应该在图书文档中将供应商名称或 ID 作为一个字段包含在内。
您选择的语言和 ES 客户端可能会使这更容易。例如,在 Ruby 中,您可以索引任意方法调用的结果,允许您在索引数据的同时动态地从其他关联模型中获取数据。
抱歉,如果有人问过这个问题,但我找不到关于这个问题的明确答案。
我在创建 elasticsearch 索引时遇到了问题,我不太确定如何正确管理关系。
假设我有以下实体:
- 产品
- 编号
- 参考
- 预订
- 编号
- 姓名
- product_id
- 衬衫
- 编号
- 颜色
- product_id
- 库存物品
- 编号
- supplier_id
- product_id
- 数量
我愿意:
- 根据颜色找出一件衬衫
- 查找 supplier_id 5 给出的所有书籍
我找不到我是否应该执行多个查询、嵌套对象、parent/children 关系等...我找不到合适的教程 "do it that way" .
实际上我正在使用嵌套对象,但我发现在我的每个类型中重新定义我需要的所有数据非常麻烦。
你对此有什么建议吗?
谢谢。
嵌套结构或父子关系是最好的选择。我希望这篇 blog 能有所帮助。
在 Elasticsearch 中搜索和建模关系的关键是去规范化。这是因为 Lucene 有一个平面数据模型,没有对数据关系的内置支持。
从搜索结果的角度考虑。正在寻找的东西是什么?您的搜索结果中显示了什么?那就是你正在寻找的东西。如果你想根据相关对象中的值过滤或排序这些东西,那么你需要在索引时提取这些值。
如果您要搜索衬衫并希望按颜色过滤,那么您的衬衫文档中应该都有一个 color
字段。如果您正在搜索图书并希望过滤到某个供应商,那么您应该在图书文档中将供应商名称或 ID 作为一个字段包含在内。
您选择的语言和 ES 客户端可能会使这更容易。例如,在 Ruby 中,您可以索引任意方法调用的结果,允许您在索引数据的同时动态地从其他关联模型中获取数据。