elasticsearch 在elasticsearch上索引数据的最佳方式是什么?,elasticsearch,indexing,elasticsearch,Indexing" /> elasticsearch 在elasticsearch上索引数据的最佳方式是什么?,elasticsearch,indexing,elasticsearch,Indexing" />

elasticsearch 在elasticsearch上索引数据的最佳方式是什么?

elasticsearch 在elasticsearch上索引数据的最佳方式是什么?,elasticsearch,indexing,elasticsearch,Indexing,我有4张桌子: 国家 陈述 城市 地址 这些表通过ID进行关联,其中国家/地区为顶级父级: state.countryId 城邦 地址:cityId 我想在我的应用程序上集成弹性搜索,并想知道索引这些表的最佳方法是什么 我是否应该为每个表创建一个索引,以便为每个国家、州、城市和地址创建一个索引 或者我应该取消表的规范化,只创建一个索引并存储所有冗余数据吗?ES并不害怕数据中的冗余,因此我会明确取消表的规范化,以便每个文档代表一个地址,如下所示: { "country_id": 1,

我有4张桌子:

  • 国家
  • 陈述
  • 城市
  • 地址
  • 这些表通过ID进行关联,其中国家/地区为顶级父级:

    • state.countryId
    • 城邦
    • 地址:cityId
    我想在我的应用程序上集成弹性搜索,并想知道索引这些表的最佳方法是什么

    我是否应该为每个表创建一个索引,以便为每个国家、州、城市和地址创建一个索引


    或者我应该取消表的规范化,只创建一个索引并存储所有冗余数据吗?

    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"
    }
    
    然后,您可以在您希望的任何城市、州、国家字段上聚合数据


    您的里程数可能会有所不同,因为这最终取决于您希望查询/聚合数据的方式,但在一个索引中查询地址数据比在多个索引中查询地址数据要容易得多。

    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"
    }
    
    然后,您可以在您希望的任何城市、州、国家字段上聚合数据


    您的里程数可能会有所不同,因为这最终取决于您希望查询/聚合数据的方式,但在一个索引中查询地址数据比在多个索引中查询地址数据要容易得多。

    我喜欢Val的答案,这是最直接的选择。但是,如果您真的想减少重复(例如最小化磁盘上的大小),您可以使用映射。不过,这会使索引和查询更加冗长。我仍然建议使用“平面”贴图


    您问到“如果您需要单个国家/地区、州或城市记录怎么办?”,我建议添加一个额外的字段(或整数),以指示此文档所代表的层次结构级别。没有对应于较低层次结构的字段是可以的。通过这种方式,您可以轻松地在搜索州或国家时使用过滤器。

    我喜欢Val的答案,这是最直接的选择。但是,如果您真的想减少重复(例如最小化磁盘上的大小),您可以使用映射。不过,这会使索引和查询更加冗长。我仍然建议使用“平面”贴图

    您问到“如果您需要单个国家/地区、州或城市记录怎么办?”,我建议添加一个额外的字段(或整数),以指示此文档所代表的层次结构级别。没有对应于较低层次结构的字段是可以的。通过这种方式,您可以轻松获得一个仅搜索州或国家的过滤器。

    是@撰写的一篇非常有用的文章,详细阐述了创建多个索引或更少索引与多种类型之间的权衡问题

    希望有帮助

    是@撰写的一篇非常有用的文章,详细阐述了创建多个索引或更少索引与多种类型之间的权衡问题


    希望有帮助

    对,我也打算做这样的事情,但是有点犹豫决定。。。不过我有一个问题。。。如果您需要单个国家或州或城市的记录,该怎么办?你是这样储存的吗<代码>{“country\u id”:1,“country\u name”:“美利坚合众国”,“state\u id”:“state\u name”:“state\u code”:“city\u id”:“city\u name”:“zip\u code”:“address”:}您可以决定只检索
    country\u*
    字段作为示例。对,我也打算这样做,但在决定时有点犹豫。。。不过我有一个问题。。。如果您需要单个国家或州或城市的记录,该怎么办?你是这样储存的吗<代码>{“country\u id”:1,“country\u name”:“美利坚合众国”,“state\u id”:“state\u name”:“state\u code”:“city\u id”:“city\u name”:“zip\u code”:“address”:}例如,您可以决定只检索
    国家*
    字段。