本文主要是介绍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(不分词)一个用于全文检索,一个用于聚合和排序。
都看到这里了,就顺手点击左上角的【关注】按钮,点击右上角的小手,给个评论,关注一下,再走呗!☺
https://blog.csdn.net/u010825931/article/details/8091639
这篇关于es版本2.x的string和5.x的keyword,text的区别和联系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!