MST
星途 面试题库

面试题:ElasticSearch索引设置要点之分词器与映射

假设你要对一篇包含中文和英文的文档进行索引,在索引设置中如何合理配置分词器,以及怎样设置映射才能让文本搜索更准确高效?请举例说明具体的配置方法。
19.7万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

分词器配置

  1. 针对英文
    • 可使用standard分词器,它是Elasticsearch默认的英文分词器,会按词边界进行分词,能处理大部分常见英文场景。例如对于句子 “I love programming.”,standard分词器会将其分为["I", "love", "programming"]
    • 若想处理一些特殊情况,如连字符连接的词,可使用english分词器,它除了按词边界分词,还会对英文进行词干提取等操作。例如对于 “programming - languages”,english分词器可能会处理为["program", "language"]
  2. 针对中文
    • 可选用ik分词器,ik_smart模式会进行粗粒度分词,例如对于句子 “我爱自然语言处理”,ik_smart会分为["我爱", "自然语言处理"]
    • ik_max_word模式会进行细粒度分词,上述句子在ik_max_word模式下会分为["我", "爱", "自然", "自然语言", "语言", "语言处理", "自然语言处理"]。在需要更精确匹配的场景下,ik_max_word可能更合适。

映射设置

假设使用Elasticsearch,以下是一个简单的索引映射示例:

{
    "mappings": {
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word", // 假设中文部分使用ik_max_word分词器
                "fields": {
                    "english": {
                        "type": "text",
                        "analyzer": "english" // 假设英文部分使用english分词器
                    }
                }
            }
        }
    }
}

在这个映射中,content字段整体使用ik_max_word分词器处理可能包含的中文部分,同时通过fields子字段english使用english分词器处理英文部分。这样在搜索时,可以对不同语言部分进行更精准高效的索引和搜索。例如,当搜索中文词汇 “自然语言” 或英文词干 “program” 时,能更准确地匹配到相关文档。