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

时间:2015-08-12 15:47:42

标签: symfony elasticsearch foselasticabundle

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

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

假设我拥有以下实体:

  • 产品
    • ID
    • 参考
    • ID
    • 名称
    • PRODUCT_ID
  • 衬衣
    • ID
    • 颜色
    • PRODUCT_ID
  • StockItem
    • ID
    • supplier_id
    • PRODUCT_ID

我想:

  • 找一件颜色的衬衫
  • 查找supplier_id 5
  • 提供的所有书籍

我无法找到我是否应该做多个查询,嵌套对象,父/子关系等...我找不到一个正确的教程,说“按照那样做”。

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

你对此有什么建议吗?

感谢的。

2 个答案:

答案 0 :(得分:1)

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

从搜索结果的角度考虑它。被搜索的是什么?您搜索结果中显示的内容是什么?那是你要搜索的东西。如果要根据相关对象中的值对这些事物进行过滤或排序,则需要在索引时提取这些值。

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

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

答案 1 :(得分:0)

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