我有4张桌子:
这些表与ID相关联,其中country是最高父级:
我想在我的应用程序上集成弹性搜索,并想知道索引这些表的最佳方法是什么?
我应该为每个表创建1个索引,以便每个国家,州,城市和地址都有1个索引吗?
或者我应该对表进行非规范化并仅创建1个索引并将所有数据存储为冗余?
答案 0 :(得分:2)
ES不怕数据冗余,因此我会明确地反规范化,以便每个文档代表一个这样的地址:
{
"country_id": 1,
"country_name": "United Stated of America",
"state_id": 1,
"state_name": "California"
"state_code": "CA",
"city_id": 1,
"city_name": "San Mateo"
"zip_code": 94402,
"address": "400 N El Camino Real"
}
然后,您可以汇总您希望的任何城市,州,国家/地区的数据。
您的里程可能会有所不同,因为它最终取决于您想要查询/汇总数据的方式,但在单个索引中查询这样的地址数据要容易得多,而不是点击几个索引。
答案 1 :(得分:0)
我喜欢Val的回答,这是最直接的选择。但是如果你真的想减少重复(例如最小化磁盘大小),你可以使用parent-child映射。它会使索引和查询更加冗长。我仍然建议你去" flat"映射。
您问"如果您需要单独的国家或州或城市记录怎么办?",我建议添加一个额外的字段(not_analyzed或整数)此文档表示的层次结构级别。没有与较低层次结构相对应的字段就可以了。通过这种方式,您可以轻松地对搜索州或国家/地区进行过滤。
答案 2 :(得分:0)
Here是@ adrien-grand的一篇非常有用的文章,详细阐述了创建多个索引或更少索引和多种类型之间权衡的主题。
希望它有所帮助!