MST

星途 面试题库

面试题:ElasticSearch搜索文档优化策略之中等难度题

在ElasticSearch中,索引设计对搜索性能影响很大。假设你有一个包含大量电商商品信息的索引,商品信息包括名称、描述、价格、分类等字段,为了优化搜索文档的性能,你会如何设计这个索引的mapping,特别是针对文本字段的分析器选择和字段类型设置?
37.5万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

1. 整体索引设计思路

对于电商商品信息索引,要考虑不同字段的查询特性,将经常用于过滤的字段设置为适合过滤的数据类型,对于文本字段要选择合适的分析器以优化搜索效果。

2. 字段类型设置

  • 名称(name)
    • 字段类型:可以设置为 text 类型用于全文搜索,同时设置一个 keyword 子字段用于精确匹配,比如商品品牌名称等需要精确查询的场景。例如:
{
  "properties": {
    "name": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword"
        }
      }
    }
  }
}
  • 描述(description)
    • 字段类型text 类型,用于全文搜索商品详细描述。由于描述内容通常较长,更注重语义搜索,所以不设置 keyword 子字段。分析器选择需要根据描述的语言特点,比如如果是中文,可选择 ik_max_word 等适合中文分词的分析器;如果是英文,可选择 english 分析器等。
  • 价格(price)
    • 字段类型floatdouble 类型,如果价格精度要求较高可使用 scaled_float 类型。例如,如果价格精度到分,可设置如下:
{
  "properties": {
    "price": {
      "type": "scaled_float",
      "scaling_factor": 100
    }
  }
}
  • 分类(category)
    • 字段类型keyword 类型,分类通常用于精确过滤和聚合操作,所以适合用 keyword 类型。例如:
{
  "properties": {
    "category": {
      "type": "keyword"
    }
  }
}

3. 分析器选择

  • 中文文本字段
    • 对于商品名称和描述中的中文部分,推荐使用 ik_max_word 分析器,它会将文本尽可能细粒度地分词,适合电商商品搜索中对商品名称和描述的灵活查询。例如,对于 “苹果手机” 会分出 “苹果”“手机”“苹果手机” 等词,能满足不同搜索意图。
  • 英文文本字段
    • 若商品名称或描述中有英文,english 分析器是不错的选择。它会进行词干提取,比如将 “running” 提取为 “run”,能提高搜索召回率,同时会去除停用词(如 “the”“and” 等),减少噪音对搜索的影响。对于多语言文本,还可以考虑 multilingual 分析器或结合自定义分析器来处理不同语言的分词需求。