MST

星途 面试题库

面试题:ElasticSearch创建索引API在复杂场景下的应用

假设你需要为一个包含多种数据类型(如文本、数字、日期)且数据量庞大的电商商品数据创建索引,要求支持高效的搜索和聚合分析。请描述如何利用ElasticSearch创建索引API进行索引的设计与创建,包括设置合适的分片、副本,以及设计精准的映射关系等,并解释这样设计的原因。
24.9万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

1. 创建索引

使用 Elasticsearch 的 PUT 请求创建索引。例如:

PUT /ecommerce_products
{
    "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
    }
}

原因

  • 分片(number_of_shards:数据量庞大时,将数据分布在多个分片上,可并行处理查询,提高搜索性能。选择5个分片是一个经验值,具体数量需根据数据量和服务器资源调整。更多分片可处理更大数据量,但会增加管理开销。
  • 副本(number_of_replicas:副本用于提高高可用性和搜索吞吐量。设置为1,即每个分片有一个副本,在主分片故障时可提供数据冗余,同时可分担读请求,提升搜索效率。

2. 设计映射关系

映射定义了文档中字段的数据类型。例如:

PUT /ecommerce_products/_mapping
{
    "properties": {
        "product_name": {
            "type": "text",
            "analyzer": "standard"
        },
        "price": {
            "type": "float"
        },
        "product_date": {
            "type": "date",
            "format": "yyyy - MM - dd"
        }
    }
}

原因

  • 文本字段(product_name:使用 text 类型,适合全文搜索。analyzer 设置为 standard,会将文本按词切分,建立倒排索引,支持高效的全文检索。
  • 数字字段(price:用 float 类型存储价格,适合数值类型的聚合分析,如计算平均价格、总价等。
  • 日期字段(product_datedate 类型可进行日期范围查询和按日期聚合。format 定义日期格式,确保日期数据的正确解析和存储。