索引弹性搜索数据的最佳方法是什么?

时间:2016-05-11 11:00:11

标签: elasticsearch indexing

我有4张桌子:

  1. 国家
  2. 状态
  3. 城市
  4. 地址
  5. 这些表与ID相关联,其中country是最高父级:

    • state.countryId
    • city.stateId
    • address.cityId

    我想在我的应用程序上集成弹性搜索,并想知道索引这些表的最佳方法是什么?

    我应该为每个表创建1个索引,以便每个国家,州,城市和地址都有1个索引吗?

    或者我应该对表进行非规范化并仅创建1个索引并将所有数据存储为冗余?

3 个答案:

答案 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的一篇非常有用的文章,详细阐述了创建多个索引或更少索引和多种类型之间权衡的主题。

希望它有所帮助!