term&match得区别 text&keyword区别
Text 概念
Text 数据类型被用来索引长文本,比如说电子邮件的主体部分或者一款产品的介绍。这些文本会被分析,在建立索引前会将这些文本进行分词,转化为词的组合,建立索引。允许 ES来检索这些词语。text 数据类型不能用来排序和聚合。
Keyword 概念
Keyword 数据类型用来建立电子邮箱地址、姓名、邮政编码和标签等数据,不需要进行分词。可以被用来检索过滤、排序和聚合。keyword 类型字段只能用本身来进行检索。
注意:如果不像以上通过mapping 配置索引时,遇到字符串类型时候的字端,系统会默认为“text”类型。检索的时候对字符串进行分析。所以要想只通过字段本身来进行检索,还是需要按照上面把该字段改为“keyword”类型。
1. term&match 区别
term: 精确查询,对查询的值不分词,直接进倒排索引去匹配。
match; 模糊查询,对查询的值分词,对分词的结果一一进入倒排索引去匹配
2. text&keyword 区别
text: 在写入时,对写入的值进行分词,然后一一插入到倒排索引。
keyword: 在写入时,将整个值插入到倒排索引中,不进行分词。
TERM + TEXT/KEYWORD
(1)TERM查询KEYWORD字段
term不会分词。而keyword字段也不分词。需要完全匹配才可。
(2)TERM查询TEXT字段
因为text字段会分词,而term不分词,所以term查询的条件必须是text字段分词后的某一个。
MATCH + TEXT/KEYWORD
(1)MATCH查询KEYWORD字段
match会被分词,而keyword不会被分词,match的需要跟keyword的完全匹配可以。
(2)MATCH查询TEXT字段
match分词,text也分词,只要match的分词结果和text的分词结果有相同的就匹配。
参考文献:https://www.freesion.com/article/59351385584/