es版本2.x的string和5.x的keyword,text的区别和联系
一 es2.x和es5.x版本定义字符串类型
2.x版本的es
string的类型
全文检索 分词 index=analysis 按单个字符匹配 被称作analyzed字符串
关键词搜索 不分词 index=not_analysis 按照整个文本进行匹配 被称为not-analyzed字符串
index=no 表示不被索引,产生的后果就是不能被检索到
string类型会给我们带来很多困惑:
5.x版本的es
为了避免上述尴尬, string字段被拆分成两种新的数据类型: text(分词)用于全文搜索的, 而keyword(不分词)用于关键词搜索.
ElasticSearch决定从Logstash中借取思路: 字符串将默认被同时映射成text和keyword类型
{
"foo": "bar"
}
ElasticSearch将会为你创建下面的动态映射(dynamic mappings):
{
"foo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
当然, 基于这个映射你即可以在foo字段上进行全文搜索, 也可以通过foo.keyword字段实现关键词搜索及数据聚合.
第二:2.x和5.x中text和keyword的对比
1.定义分词analyzed,2.x和5.x的定义
{
"foo": {
"type": "string",
"index": "analyzed"
}
}
如今只要映射为text即可:
{
"foo": {
"type": "text",
"index": true
}
}
换句话说:2.x的type=string,index=analyzed等于5.x的type=text,index=true
2.定义分词not_analyzed,2.x和5.x的定义
{
"foo": {
"type": "string",
"index": "not_analyzed"
}
}
也只需要被定义为keyword即可:
{
"foo": {
"type": "keyword",
"index": true
}
}
换句话说:2.x的type=string,index=not_analyzed等于5.x的type=keyword,index=true
简而言之,言而总之:text(分词),keyword(不分词)一个用于全文检索,一个用于聚合和排序
————————————————
版权声明:本文为CSDN博主「健康平安的活着」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011066470/article/details/88760762