前言
这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱
参考文章:
-
https://segmentfault.com/q/1010000017312707
-
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
则不会。前者会对查询内容做分词处理之后再匹配,而后者则是直接对查询结果做精确匹配。文章来源:https://www.toymoban.com/news/detail-732867.html
- 在Elasticsearch中,正常添加数据,ES会自动识别所添加数据的类型,并为它分配类型,并为每个特殊类型分别建索引,以用来进行之后的搜索,而作为全文搜索引擎,ES将String域的字段可以分为准确数据类型,和全文文本类型
- 准确数据类型: keyword,直接被存储为了二进制,检索时我们直接匹配,不匹配就返回false
- 全文文本类型: text,这个的检索不是直接给出是否匹配,而是检索出相似度,并按照相似度由高到低返回结果
- 也就是说text是将字段拆分,然后找到最匹配拿哪项(无法全匹配),keyword是全匹配才可以
- ES的term query做的是精确匹配而不是分词查询,因此对text类型的字段做term查询将是查不到结果的(除非字段本身经过分词器处理后不变,未被转换或分词)。此时,必须使用foobar.keyword来对foobar字段以keyword类型进行精确匹配。
作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。文章来源地址https://www.toymoban.com/news/detail-732867.html
到了这里,关于ES中type和keyword两个数据类型的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!