Elasticsearch analyzer 和 search_analyzer 的使用记录
环境
- elasticsearch 6.4.3
示例
下面一段文字用 ik 进行分词
http://34.0.7.184:9200/_analyze/ POST
1 | { |
分词结果
1 | { |
这个时候如果配置的 analyzer 为 ik_smart 或者 analyzer 和 search_analyzer 都为 ik_smart, 则短语中每一个字都能搜到结果,还可以设置高亮信息来着重看一下
如果配置的 analyzer 为 ik search_analyzer 为 standard ,则
通知
,说明
,七号
这样的词是搜不到的,而线
和的
这样的词可以搜到,理解一下
http://34.0.7.184:9200/attachment_libs/_search POST
1 | { |
返回的结果为:
1 | { |
而搜索 线
返回的结果为:
1 | { |
总结
- 分析器主要有两种情况会被使用,一种是插入文档时,将text类型的字段做分词然后插入倒排索引,第二种就是在查询时,先对要查询的text类型的输入做分词,再去倒排索引搜索
- 如果想要让 索引 和 查询 时使用不同的分词器,ElasticSearch也是能支持的,只需要在字段上加上search_analyzer参数
- 在索引时,只会去看字段有没有定义analyzer,有定义的话就用定义的,没定义就用ES预设的
- 在查询时,会先去看字段有没有定义search_analyzer,如果没有定义,就去看有没有analyzer,再没有定义,才会去使用ES预设的