我的Rails模型索引映射中Elasticsearch分析器是否生效?
你的默认英文分析器是否生效?
结论:你的配置里,英文分析器对所有text类型字段是生效的,但对数值、布尔类型字段无作用,具体拆解如下:
1. 不同字段的生效情况
- 数值/布尔类型字段(field1、field2、field3、field8):这类字段不需要分词处理,Elasticsearch会直接存储原始值,所以不管你配置什么分析器,都不会对它们产生影响。
- text类型字段(field4、field5、field6、field7):text类型默认会继承索引级别的
default分析器,也就是你配置的english分析器。这些字段在索引和搜索时,都会用英文分析器做分词、词干提取、停用词过滤等处理。 - text字段下的keyword子字段(field4.keyword、field5.keyword、field6.keyword):keyword类型是精确匹配的字段,不会做分词,所以也不会用到分析器。
2. 两种写法的区别
你看到的另一种显式给字段加analyzer: "default"的写法,和当前的全局默认配置效果一致——只要是未单独指定分析器的text字段,都会用默认的english分析器。两种写法的差异在于:
- 全局默认配置:适合所有text字段用同一分析器的场景,配置更简洁,后续新增text字段也会自动继承。
- 字段显式指定:适合给不同字段配置不同分析器的场景,或者想明确标注字段使用的分析器(避免依赖全局配置的变更)。
3. 验证分析器是否生效的方法
可以用Elasticsearch的_analyze API直接测试某个text字段的分词效果:
POST /你的索引名称/_analyze { "field": "field7", "text": "Running quickly through the park" }
如果返回的分词结果包含run(词干提取)、quick(词干提取)、park,且没有the(停用词被过滤),就说明english分析器已经正常生效了。
内容的提问来源于stack exchange,提问作者Syed Zaidi
相关产品推荐
相关产品推荐

