在创建 Elasticsearch(简称 ES)索引时,有多个注意事项需要考虑。以下是一些关键的注意事项,我会通过具体的例子进行详细说明。
-
明确索引需求:在创建索引之前,我们需要对我们的数据和查询需求有清晰的理解。这包括数据的类型(例如文本,数字,日期等)、数据的大小(例如是否有大量的数据需要被索引)、查询的需求(例如是否需要全文搜索,是否需要聚合操作等)。这些因素都会影响我们如何设置索引的映射和设置。
例如,假设我们有一个包含用户信息的数据集,每个用户有姓名、年龄、生日、地址等属性。如果我们需要对姓名进行全文搜索,对年龄进行范围查询,对生日进行聚合操作,那么我们在创建索引时就需要为每个字段设置相应的类型和分析器。
-
索引映射:映射是定义索引中字段如何存储和如何搜索的过程。我们可以为每个字段定义类型(例如 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
类型,可以进行精确搜索。 -
索引设置:在创建索引时,我们可以定义一些设置,包括分片数、副本数、刷新间隔等。
例如,假设我们的用户信息数据集非常大,我们可以将分片数设置为 5,将副本数设置为 1,以提高搜索性能和数据的可用性:
PUT /user { `settings`: { `number_of_shards`: 5, `number_of_replicas`: 1 }, ... }
需要注意的是,索引的分片数在创建时就需要定义好,之后无法更改。而副本数可以在之后进行修改。
-
动态映射:ES 默认开启动态映射功能,这意味着如果索引中新加入的文档包含新的字段,ES 会自动为这些新字段创建映射。虽然这个功能在某些情况下很有用,但在某些情况下也可能导致问题。