面试题答案
一键面试常见分析器类型及其适用场景
- standard分析器
- 适用场景:默认分析器,适用于大多数通用文本场景,如文章正文、产品描述等一般性文本。它会将文本按词切分,移除停用词,并将词转为小写。
- 举例:对于文本 “The quick brown fox jumps over the lazy dog”,会被切分为 “the”,“quick”,“brown”,“fox”,“jumps”,“over”,“lazy”,“dog” 等词。
- keyword分析器
- 适用场景:适用于不希望被分词的字段,如邮政编码、身份证号码、品牌名称等,会将整个输入作为单个词项索引。
- 举例:输入 “100086”,索引时就是 “100086” 这个完整的词,搜索时必须精确匹配 “100086” 才能找到。
- pattern分析器
- 适用场景:适用于根据特定模式进行分词的场景,例如文本中包含特殊分隔符,像 “,”“;”“ - ” 等,可按这些分隔符分词。
- 举例:对于文本 “apple,banana;cherry - grape”,如果模式设置为 “[,; -]”,会被切分为 “apple”,“banana”,“cherry”,“grape”。
配置和使用分析器优化特定文本字段搜索精准度
假设我们有一个索引 “products”,其中有个字段 “description” 用于产品描述,希望使用自定义分析器优化搜索。
-
定义自定义分析器
PUT /products { "settings": { "analysis": { "analyzer": { "my_custom_analyzer": { "tokenizer": "standard", "filter": [ "lowercase", "stop" ] } } } } }
这里定义了一个名为 “my_custom_analyzer” 的自定义分析器,它基于 “standard” 分词器,添加了 “lowercase”(转为小写)和 “stop”(移除停用词)过滤器。
-
使用自定义分析器映射字段
PUT /products/_mapping { "properties": { "description": { "type": "text", "analyzer": "my_custom_analyzer" } } }
这样就将 “description” 字段映射为使用 “my_custom_analyzer” 分析器,从而在索引和搜索时,对该字段文本按自定义规则处理,提高搜索精准度。