MST
星途 面试题库

面试题:ElasticSearch创建索引时的Mapping设置优化

假设有一个包含用户信息(姓名、年龄、地址、联系方式、兴趣爱好等)的文档需要创建索引,要求实现高效的全文搜索、精确匹配以及范围查询等功能。请详细描述在创建索引时如何设计Mapping,包括字段类型选择、分析器设置等,并解释这样设置的好处。
49.9万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

字段类型选择

  1. 姓名
    • 类型text 类型用于全文搜索,同时使用 keyword 类型用于精确匹配。
    • 分析器:对于 text 类型,可选择适合该语言的分析器,如中文可选 ik_max_word 分析器,它能进行细粒度的分词,利于全文搜索。keyword 类型不进行分词,直接用于精确匹配,无需设置分析器。
    • 好处text 类型分词后可用于全文搜索,满足用户模糊查找姓名的需求,keyword 类型可用于精确匹配,如根据全名查询特定用户。
  2. 年龄
    • 类型integer 类型。
    • 分析器:无需分析器,因为年龄是数值,不是文本,不需要分词。
    • 好处integer 类型占用空间小,并且能高效地进行范围查询,如查询年龄在某个区间的用户。
  3. 地址
    • 类型text 类型。
    • 分析器:可选择适合地址文本特点的分析器,如中文地址可选 ik_max_word 分析器,能对地址文本进行有效分词,方便全文搜索。
    • 好处:可以对地址进行全文搜索,例如用户搜索包含某个小区名或街道名的地址。
  4. 联系方式
    • 类型keyword 类型。
    • 分析器:无需分析器,联系方式通常是精确的字符串,无需分词。
    • 好处:适合精确匹配,如通过电话号码或邮箱地址精确查找用户。
  5. 兴趣爱好
    • 类型text 类型。
    • 分析器:根据具体兴趣爱好文本特点选择分析器,例如通用的 standard 分析器或者适合特定语言的分析器,方便对兴趣爱好进行全文搜索。
    • 好处:支持全文搜索,比如搜索喜欢 “篮球” 的用户,能对兴趣爱好文本进行有效分词匹配。

Mapping 设计示例(以 Elasticsearch 为例)

{
    "mappings": {
        "properties": {
            "姓名": {
                "type": "text",
                "analyzer": "ik_max_word",
                "fields": {
                    "keyword": {
                        "type": "keyword"
                    }
                }
            },
            "年龄": {
                "type": "integer"
            },
            "地址": {
                "type": "text",
                "analyzer": "ik_max_word"
            },
            "联系方式": {
                "type": "keyword"
            },
            "兴趣爱好": {
                "type": "text",
                "analyzer": "standard"
            }
        }
    }
}

这样设置能充分利用不同字段类型和分析器的特点,实现高效的全文搜索、精确匹配以及范围查询等功能,满足对用户信息文档索引的多样化搜索需求。