MST

星途 面试题库

面试题:ElasticSearch如何通过分析器提升搜索精准度

在ElasticSearch中,分析器对搜索精准度起着重要作用。请阐述常见的分析器类型(如standard、keyword、pattern等)及其适用场景,并举例说明如何配置和使用分析器来优化特定文本字段的搜索精准度。
35.6万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

常见分析器类型及其适用场景

  1. standard分析器
    • 适用场景:默认分析器,适用于大多数通用文本场景,如文章正文、产品描述等一般性文本。它会将文本按词切分,移除停用词,并将词转为小写。
    • 举例:对于文本 “The quick brown fox jumps over the lazy dog”,会被切分为 “the”,“quick”,“brown”,“fox”,“jumps”,“over”,“lazy”,“dog” 等词。
  2. keyword分析器
    • 适用场景:适用于不希望被分词的字段,如邮政编码、身份证号码、品牌名称等,会将整个输入作为单个词项索引。
    • 举例:输入 “100086”,索引时就是 “100086” 这个完整的词,搜索时必须精确匹配 “100086” 才能找到。
  3. pattern分析器
    • 适用场景:适用于根据特定模式进行分词的场景,例如文本中包含特殊分隔符,像 “,”“;”“ - ” 等,可按这些分隔符分词。
    • 举例:对于文本 “apple,banana;cherry - grape”,如果模式设置为 “[,; -]”,会被切分为 “apple”,“banana”,“cherry”,“grape”。

配置和使用分析器优化特定文本字段搜索精准度

假设我们有一个索引 “products”,其中有个字段 “description” 用于产品描述,希望使用自定义分析器优化搜索。

  1. 定义自定义分析器

    PUT /products
    {
        "settings": {
            "analysis": {
                "analyzer": {
                    "my_custom_analyzer": {
                        "tokenizer": "standard",
                        "filter": [
                            "lowercase",
                            "stop"
                        ]
                    }
                }
            }
        }
    }
    

    这里定义了一个名为 “my_custom_analyzer” 的自定义分析器,它基于 “standard” 分词器,添加了 “lowercase”(转为小写)和 “stop”(移除停用词)过滤器。

  2. 使用自定义分析器映射字段

    PUT /products/_mapping
    {
        "properties": {
            "description": {
                "type": "text",
                "analyzer": "my_custom_analyzer"
            }
        }
    }
    

    这样就将 “description” 字段映射为使用 “my_custom_analyzer” 分析器,从而在索引和搜索时,对该字段文本按自定义规则处理,提高搜索精准度。