面试题答案
一键面试1. analyzer参数在match查询中的兼容性表现及原理
- 兼容性表现:match查询是全文搜索查询,analyzer参数兼容性良好,通常用于指定分析器对查询字符串进行分析。比如,当查询一个包含多个单词的文本字段时,可通过analyzer参数指定特定分析器将查询字符串拆分为词项,再与索引中的词项匹配。
- 原理:Elasticsearch在索引文档时,会根据字段映射中指定的分析器对字段值进行分析,将其转换为词项存储在倒排索引中。在执行match查询时,若指定了analyzer参数,它会使用该分析器对查询字符串进行相同的分析过程,将查询字符串转换为词项,然后在倒排索引中查找匹配的文档。例如,使用标准分析器时,它会将文本按词进行拆分、小写处理等,查询时也遵循同样规则,这样就可以找到匹配的文档。
2. analyzer参数在term查询中的兼容性表现及原理
- 兼容性表现:term查询是精确匹配查询,analyzer参数一般不适用。如果在term查询中指定analyzer参数,多数情况下不会按预期改变查询行为,因为term查询直接匹配倒排索引中的精确词项,而不依赖分析过程。
- 原理:term查询直接在倒排索引中查找与给定查询词完全相同的词项。它不关心词项是如何分析得来的,只要在索引中存在完全一样的词项就匹配。所以,即使指定了analyzer参数,它也不会对查询词进行分析,而是直接使用给定的查询词去匹配索引中的词项。例如,若索引中有词项“apple”,使用term查询“apple”会匹配,但若指定分析器将“apple”转换为其他形式再查询,就可能无法匹配,因为term查询只看精确匹配。