1

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

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

假设我有以下实体:

  • 产品
    • ID
    • 参考
    • ID
    • 姓名
    • product_id
  • 衬衫
    • ID
    • 颜色
    • product_id
  • 库存项目
    • ID
    • 供应商 ID
    • product_id
    • 数量

我想 :

  • 从它的颜色中找到一件衬衫
  • 查找由供应商 ID 5 提供的所有书籍

我无法找到我是否应该执行多个查询、嵌套对象、父/子关系等......我找不到一个合适的教程,上面写着“那样做”。

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

你对此有什么建议吗?

谢谢。

4

2 回答 2

1

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

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

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

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

于 2015-08-13T00:26:23.513 回答
0

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

于 2015-08-12T18:43:09.750 回答