Elasticsearch 中 analyzer/search_analyzer/ik_max_word/ik_smart 的使用
一、先说几个关键 属性
1,String 类,分为两种:
- text:可分词,不参与聚合
- keyword:不可分词,数据会作为完整字段进行匹配,可参与聚合
2,Numberical 数值类型,分两类:
- 基本数据类型:long、integer、short、byte、double、float、half_float
- 浮点数高精度类型:scaled_float(需要制定精度因子,10或100这样,es会把真实值与之相乘后存储,取出时还原)
3,Date 日期类型
- ES 可以对日期格式,化为字符串存储,但是我们建议存储为毫秒值 long,节省空间
二、ik_max_word 和 ik_smart
1,ik_max_word:会对文本做最细 力度的拆分
2,ik_smart:会对文本做最粗粒度的拆分
两种 分词器的最佳实践: 索引时用 ik_max_word(面面俱到), 搜索时用 ik_smart(精准匹配)。
三、分词器 analyzer 和 search_analyzer
1,分词器 analyzer 的作用有二:
- 一是 插入文档时,将 text 类型字段做分词,然后插入 倒排索引。
- 二是 在查询时,先对 text 类型输入做分词, 再去倒排索引搜索。
2,如果想要“索引”和“查询”, 使用不同的分词器,那么 只需要在字段上 使用 search_analyzer。这样,索引只看 analyzer,查询就看 search_analyzer。
此外,如果没有定义,就看有没有 analyzer,再没有就去使用 ES 预设。