MST

星途 面试题库

面试题:ElasticSearch复杂业务场景下索引创建的高级优化

在一个涉及多语言文本搜索、地理位置查询以及实时数据分析的复杂业务场景中,如何基于ElasticSearch创建索引,以满足所有业务需求并实现最优性能?详细说明索引映射设计、分词器选择、索引生命周期管理等方面的策略与实践。
24.2万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

索引映射设计

  1. 多语言文本搜索
    • 对于不同语言的文本字段,使用multi - fields特性。例如,对于英文文本,使用english分析器,对于中文文本,使用支持中文分词的分析器如ik_max_word
    • 示例:
    {
        "properties": {
            "title": {
                "type": "text",
                "fields": {
                    "english": {
                        "type": "text",
                        "analyzer": "english"
                    },
                    "chinese": {
                        "type": "text",
                        "analyzer": "ik_max_word"
                    }
                }
            }
        }
    }
    
  2. 地理位置查询
    • 对于地理位置字段,使用geo_point类型。例如,如果有店铺位置信息,可这样定义:
    {
        "properties": {
            "location": {
                "type": "geo_point"
            }
        }
    }
    
    • 在数据插入时,可提供经纬度格式数据,如{ "location": "40.7127,-74.0059" }
  3. 实时数据分析
    • 对于需要实时分析的数值型字段,如销售额、访问量等,使用longdouble类型。
    • 对于分类字段,使用keyword类型,这样可用于聚合分析。例如,商品类别字段:
    {
        "properties": {
            "category": {
                "type": "keyword"
            }
        }
    }
    

分词器选择

  1. 英文:使用english分词器,它会处理英文单词的复数、词干提取等。例如,“running”会被处理为“run”。
  2. 中文:选择ik_max_word分词器,它会将中文文本尽可能细粒度地分词,适合中文搜索场景。如“中华人民共和国”会被分为“中华”“人民”“共和国”等多个词。
  3. 通用场景:对于一些不需要特定语言处理的通用文本,可使用standard分词器,它是Elasticsearch默认的分词器,能处理多种语言的基本分词。

索引生命周期管理

  1. 创建索引模板
    • 定义索引的基本设置,如副本数、分片数等。例如,对于高可用性要求较高的场景,可设置副本数为2:
    {
        "template": "my - index - *",
        "settings": {
            "number_of_shards": 5,
            "number_of_replicas": 2
        },
        "mappings": {
            // 前面定义的索引映射内容
        }
    }
    
  2. 索引滚动
    • 当索引数据量达到一定阈值或时间达到一定周期时,创建新的索引。例如,每天创建一个新的索引用于存储当天的实时数据。可以使用Elasticsearch的Index Alias,让应用程序通过别名访问索引,切换索引时应用程序无感知。
  3. 索引删除策略
    • 对于历史数据,根据业务需求设置删除策略。如对于一年前的日志数据索引,可定期删除。可以使用Elasticsearch的Snapshot和Restore功能,先对要删除的索引进行快照备份,然后再删除,以便在需要时恢复数据。