在ElasticSearch中管理关系的最好方法是什么?



对不起,如果这个问题已经问了,但我找不到明确的答案。

我在创建我的elasticsearch索引时遇到了麻烦,我不确定如何正确管理关系。

假设我有我们有以下实体:

  • 产品
    • id
    • 参考
  • 的书
    • id
    • <
    • 名称/gh>
    • product_id
  • 衬衫
    • id
    • 颜色
    • product_id
  • StockItem
    • id
    • supplier_id
    • product_id

我想:

  • 查找衬衫的颜色
  • 查找由suppler_id 5提供的所有书籍

我无法找到如果我应该做多个查询,嵌套对象,父/子关系等…我找不到一个合适的教程说"这样做"。

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

你有什么建议吗?

谢谢。

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

从搜索结果的角度来考虑。正在搜索的东西是什么?在你的搜索结果中会出现什么?这就是你要找的东西。如果您想根据相关对象中的值对这些内容进行过滤或排序,则需要在索引时将这些值拉入。

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

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

嵌套结构或父子关系是最好的选择。我希望这个博客能帮到你。

相关内容

最新更新