ES中type和keyword两个数据类型的区别
ES数据类型:type与keyword:https://blog.csdn.net/ywb201314/article/details/112667516
了解
数据类型
简单的类型:
text、keyword、date、long、double、boolean和ip
复杂类型有:
object和nested
较特殊的类型:
geo_point,geo_shape,和completion
当你没有以Explicit mapping 的形式为你的索引字段预先指定mapping的话,ES就会使用Dynamic Mapping,通过推断你传入的文档中字段的值对字段进行动态映射。
比如你直接在文档中直接传入字段"name":"小陈"
,那么es就会动态映射如下mapping
text和keyword的对比
ES5.0及以后的版本取消了
string
类型,将原先的string
类型拆分为text
和keyword
两种类型。它们的区别在于text
会对字段进行分词处理而keyword
则不会。前者会对查询内容做分词处理之后再匹配,而后者则是直接对查询结果做精确匹配。
在Elasticsearch中,正常添加数据,ES会自动识别所添加数据的类型,并为它分配类型,并为每个特殊类型分别建索引,以用来进行之后的搜索,而作为全文搜索引擎,ES将String域的字段可以分为准确数据类型,和全文文本类型
准确数据类型: keyword,直接被存储为了二进制,检索时我们直接匹配,不匹配就返回false
全文文本类型: text,这个的检索不是直接给出是否匹配,而是检索出相似度,并按照相似度由高到低返回结果
也就是说text是将字段拆分,然后找到最匹配拿哪项(无法全匹配),keyword是全匹配才可以
ES的做的是精确匹配而不是分词查询,因此对text类型的字段做term查询将是查不到结果的(除非字段本身经过分词器处理后不变,未被转换或分词)。此时,必须使用foobar.keyword来对foobar字段以keyword类型进行精确匹配。
- 点赞
- 收藏
- 关注作者
评论(0)