Elasticsearch 7.6.1 数据类型、term、match、wildcard
简要说明
初期使用 Elasticsearch出现了一些初级问题,包括__term__全匹配查询失败,wildcard like 查询时失败。
问题说明
上述问题均是基于text和keyword类型的差异引起的问题,因此需要先了解Elasticsearch 存储数据时的数据结构,数据类型,再基于需要实现的功能,采取合适的数据类型。
数据类型
- text/keyword都可理解存储string类型,在2.x版本种,es是存在string类型的,进化过程中演变为了text和keyword。
- Numeric,存储的则为数值型数据,其中包含long, integer, short, byte, double, float, half_float, scaled_float共8种数值类型,也是够丰富的,mysql种的数值型数据,都可以映射到Numeric当中。
- Date,时间类型,可以通过预设的3种形式或者自定义的format来存储日期信息。
- Boolean,布尔类型(true or false)。
分词查询
- text类型的数据,存储时会先进行分析,将文本拆分成词,并倒叙索引存储,因此在查询时,全文本匹配会有失效的可能。
- keyword类型的数据,保存时不会进行分析。
- 7.6.1版本(除较低版本外应该都是)对文本类型的数据结构默认以text为主,keyword为映射类型。在进行全匹配查询时使用字段.keyword,可以避免由于text类型数据被分词引起的问题。
term、match、wildcard
类型 | 查询方式 | 是否分词 |
---|---|---|
term | 对字符串数据进行全匹配查询 (=) | 不会分词,对已分词的数据进行查询无法达到预定效果 |
match | 对字符串数据进行关键词查询 | 需要分词,对未分词数据进行查询无法达到预定效果 |
wildcard | 对字符串数据进行模糊查询 (like) | 不会分词,对已分词的数据进行查询无法达到预定效果 |