elasticsearch的type、text和keyword

**

elasticsearch的type、text和keyword

**
前几天在使用elasticsearch的时候发现一个问题就是,elasticsearch6.0之后的版本和6.0之前的版本有一个不一样的地方,就是type。其次还有一个稍微有点坑的是查询时候的text和keyword。

text和keyword

elasticsearch的查询跟插入我都使用的是java代码,碰到的情况是我存进去的数据是大写字母(中间有下划线),然后根据这个字段一直搜索不到数据,但是如果不是int类型的就可以查到数据,上网找原因,最后找到一个人说是不是因为大小写的原因,然后把插入的数据换成了小写之后就好使了。好使了之后就一直想知道具体是什么原因造成的大小写的问题会造成查询的结果不一样呢。
最后,找到了具体原因:
elasticsearch的查询字段的text和keyword造成的。
官方文档
If you need to index full text content such as email bodies or product descriptions, it is likely that you should rather use a text field.
如果你需要去索引长文本,比如电子邮箱的内容或者一个产品的介绍。那么你可以使用text这个字段。
使用text这个字段查询文本就会被分析,索引在被简历之前就会对这些文本进行分词,建立索引查询。
They are typically used for filtering (Find me all blog posts where status is published), for sorting, and for aggregations. Keyword fields are only searchable by their exact value.
对于过滤(过滤出状态是已经发布的所有博客),排序,聚合有一个比较典型的用法:keyword会使用他们原本的值。
string数据put到elasticsearch中,默认是text。
我用的是大写字母默认是text在查询的时候全部都被转成了小写字母分词查找,所以什么都没有找到。

type

在elasticsearch6.0之前是有个type的概念的,index类似于数据库的库,type类似于表,但是在6.0之后就不再使用type这个字段了。
我查询不到数据的原因还有一部分的原因是因为我插入的数据有个字段名字叫type,我根据图形化界面看到了我插入的数据里面有个_type的字段,(_type是本身自带的,值为log)所以我就把字段名称改了,结果还是没有数据,经过查找发现6.0之后type这个字段基本就是作废了,于是就把根据type查询的那一部分删掉了,加上上面加上了keyword限制,最后终于查找到了数据。

发布了30 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/syr1136877833/article/details/84257255