创建 elastic search 索引的一些注意事项

发布时间 2023-08-22 19:49:09作者: JerryWang_汪子熙

在创建 Elasticsearch(简称 ES)索引时,有多个注意事项需要考虑。以下是一些关键的注意事项,我会通过具体的例子进行详细说明。

  1. 明确索引需求:在创建索引之前,我们需要对我们的数据和查询需求有清晰的理解。这包括数据的类型(例如文本,数字,日期等)、数据的大小(例如是否有大量的数据需要被索引)、查询的需求(例如是否需要全文搜索,是否需要聚合操作等)。这些因素都会影响我们如何设置索引的映射和设置。

    例如,假设我们有一个包含用户信息的数据集,每个用户有姓名、年龄、生日、地址等属性。如果我们需要对姓名进行全文搜索,对年龄进行范围查询,对生日进行聚合操作,那么我们在创建索引时就需要为每个字段设置相应的类型和分析器。

  2. 索引映射:映射是定义索引中字段如何存储和如何搜索的过程。我们可以为每个字段定义类型(例如 text,keyword,date,long 等),也可以定义分析器、格式化器等。

    例如,我们可以为上述用户信息数据集创建如下的映射:

    PUT /user
    {
      `mappings`: {
        `properties`: {
          `name`: { `type`: `text` },
          `age`: { `type`: `integer` },
          `birthday`: { `type`: `date`, `format`: `yyyy-MM-dd` },
          `address`: { `type`: `keyword` }
        }
      }
    }
    

    在这个映射中,name 字段被设置为 text 类型,可以进行全文搜索。age 字段被设置为 integer 类型,可以进行范围查询。birthday 字段被设置为 date 类型,并定义了日期的格式。address 字段被设置为 keyword 类型,可以进行精确搜索。

  3. 索引设置:在创建索引时,我们可以定义一些设置,包括分片数、副本数、刷新间隔等。

    例如,假设我们的用户信息数据集非常大,我们可以将分片数设置为 5,将副本数设置为 1,以提高搜索性能和数据的可用性:

    PUT /user
    {
      `settings`: {
        `number_of_shards`: 5,
        `number_of_replicas`: 1
      },
      ...
    }
    

    需要注意的是,索引的分片数在创建时就需要定义好,之后无法更改。而副本数可以在之后进行修改。

  4. 动态映射:ES 默认开启动态映射功能,这意味着如果索引中新加入的文档包含新的字段,ES 会自动为这些新字段创建映射。虽然这个功能在某些情况下很有用,但在某些情况下也可能导致问题。