对不起,如果这个问题已经问了,但我找不到明确的答案。
我在创建我的elasticsearch索引时遇到了麻烦,我不确定如何正确管理关系。
假设我有我们有以下实体:
- 产品
- id 参考
- 的书
- id <
- 名称/gh>
- product_id
- 衬衫
- id 颜色
- product_id
- StockItem
- id
- supplier_id
- product_id
我想:
- 查找衬衫的颜色
- 查找由suppler_id 5提供的所有书籍
我无法找到如果我应该做多个查询,嵌套对象,父/子关系等…我找不到一个合适的教程说"这样做"。
实际上我正在使用嵌套对象,但我发现在我的每个类型中重新定义我需要的所有数据非常脏。
你有什么建议吗?
谢谢。
在Elasticsearch中搜索和建模关系的关键是去规范化。这是因为Lucene有一个平面数据模型,没有内置对数据关系的支持。
从搜索结果的角度来考虑。正在搜索的东西是什么?在你的搜索结果中会出现什么?这就是你要找的东西。如果您想根据相关对象中的值对这些内容进行过滤或排序,则需要在索引时将这些值拉入。
如果您正在搜索衬衫并希望按颜色过滤,那么您的衬衫文档应该都有一个color
字段。如果您正在搜索图书,并希望过滤到某个供应商,那么您应该在图书文档中包含供应商名称或ID作为字段。
您选择的语言和ES客户端可能会使这更容易。例如,在Ruby中,您可以索引任意方法调用的结果,从而允许您在索引数据时动态地从其他相关模型中获取数据。
嵌套结构或父子关系是最好的选择。我希望这个博客能帮到你。