很抱歉,如果有人问这个问题,但我找不到关于这个问题的明确答案。
我在创建弹性搜索索引时遇到了麻烦,我不确定如何正确管理关系。
假设我拥有以下实体:
我想:
我无法找到我是否应该做多个查询,嵌套对象,父/子关系等...我找不到一个正确的教程,说“按照那样做”。
实际上我正在使用嵌套对象,但我发现在每种类型中重新定义我需要的所有数据都很脏。
你对此有什么建议吗?
感谢的。
答案 0 :(得分:1)
在Elasticsearch中搜索和建模关系的关键是非规范化。这是因为Lucene有一个平面数据模型,没有内置支持数据中的关系。
从搜索结果的角度考虑它。被搜索的是什么?您搜索结果中显示的内容是什么?那是你要搜索的东西。如果要根据相关对象中的值对这些事物进行过滤或排序,则需要在索引时提取这些值。
如果您正在搜索衬衫并希望按颜色进行过滤,那么您的衬衫文档上应该都有color
字段。如果您正在搜索图书并希望过滤到某个供应商,那么您应该将供应商名称或ID作为字段添加到图书文档中。
您选择的语言和ES客户端可以使这更容易。例如,在Ruby中,您可以索引任意方法调用的结果,允许您在索引数据时从其他关联模型中动态获取。
答案 1 :(得分:0)
嵌套结构或父子关系是您最好的选择。我希望这blog会有所帮助。