面试题答案
一键面试索引映射设计
- 多语言文本搜索:
- 对于不同语言的文本字段,使用
multi - fields
特性。例如,对于英文文本,使用english
分析器,对于中文文本,使用支持中文分词的分析器如ik_max_word
。 - 示例:
{ "properties": { "title": { "type": "text", "fields": { "english": { "type": "text", "analyzer": "english" }, "chinese": { "type": "text", "analyzer": "ik_max_word" } } } } }
- 对于不同语言的文本字段,使用
- 地理位置查询:
- 对于地理位置字段,使用
geo_point
类型。例如,如果有店铺位置信息,可这样定义:
{ "properties": { "location": { "type": "geo_point" } } }
- 在数据插入时,可提供经纬度格式数据,如
{ "location": "40.7127,-74.0059" }
。
- 对于地理位置字段,使用
- 实时数据分析:
- 对于需要实时分析的数值型字段,如销售额、访问量等,使用
long
或double
类型。 - 对于分类字段,使用
keyword
类型,这样可用于聚合分析。例如,商品类别字段:
{ "properties": { "category": { "type": "keyword" } } }
- 对于需要实时分析的数值型字段,如销售额、访问量等,使用
分词器选择
- 英文:使用
english
分词器,它会处理英文单词的复数、词干提取等。例如,“running”会被处理为“run”。 - 中文:选择
ik_max_word
分词器,它会将中文文本尽可能细粒度地分词,适合中文搜索场景。如“中华人民共和国”会被分为“中华”“人民”“共和国”等多个词。 - 通用场景:对于一些不需要特定语言处理的通用文本,可使用
standard
分词器,它是Elasticsearch默认的分词器,能处理多种语言的基本分词。
索引生命周期管理
- 创建索引模板:
- 定义索引的基本设置,如副本数、分片数等。例如,对于高可用性要求较高的场景,可设置副本数为2:
{ "template": "my - index - *", "settings": { "number_of_shards": 5, "number_of_replicas": 2 }, "mappings": { // 前面定义的索引映射内容 } }
- 索引滚动:
- 当索引数据量达到一定阈值或时间达到一定周期时,创建新的索引。例如,每天创建一个新的索引用于存储当天的实时数据。可以使用Elasticsearch的Index Alias,让应用程序通过别名访问索引,切换索引时应用程序无感知。
- 索引删除策略:
- 对于历史数据,根据业务需求设置删除策略。如对于一年前的日志数据索引,可定期删除。可以使用Elasticsearch的Snapshot和Restore功能,先对要删除的索引进行快照备份,然后再删除,以便在需要时恢复数据。