HTML5search和text区别,Elasticsearch中text与keyword的区别

ES更新到5版本后,取消了 string 数据类型,代替它的是 keyword 和 text 数据类型.那么 text 和keyword有什么区别呢?

添加数据

使用bulk往es数据库中批量添加一些document

POST /book/novel/_bulk

{"index": {"_id": 1}}

{"name": "Gone with the Wind", "author": "Margaret Mitchell", "date": "2018-01-01"}

{"index": {"_id": 2}}

{"name": "Robinson Crusoe", "author": "Daniel Defoe", "date": "2018-01-02"}

{"index": {"_id": 3}}

{"name": "Pride and Prejudice", "author": "Jane Austen", "date": "2018-01-01"}

{"index": {"_id": 4}}

{"name": "Jane Eyre", "author": "Charlotte Bronte", "date": "2018-01-02"}

查看mapping

发现name、author的type是text,

还有个field是keyword,keyword的type是keyword:

4195469f0c4eb5ad95a6877a51e58e69.png

查询

使用term查询某个小说:

GET book/novel/_search

{

"query": {

"constant_score": {

"filter": {

"term": {

"name": "Gone with the Wind"

}

},

"boost": 1.2

}

}

}

结果是什么也没有查到:

669127457ebfc6fe422fbd4ccd763088.png

然后使用name的keyword查询:

GET book/novel/_search

{

"query": {

"constant_score": {

"filter": {

"term": {

"name.keyword": "Gone with the Wind"

}

},

"boost": 1.2

}

}

}

可以查询到一条数据:

1b8a82fc705a199750daf7bdb0f085d9.png

实验

使用name不能查到,而使用name.keyword可以查到,我们可以通过下面的实验来判断:

使用name进行分词的时候,结果会有4个词出来:

471436d26fd05cfd7f897c435000843c.png

使用name.keyword进行分词的时候,结果只有一个词出来:

aa329d08c42300a922815d279755ebd8.png

结论

text类型:会分词,先把对象进行分词处理,然后再再存入到es中。

当使用多个单词进行查询的时候,当然查不到已经分词过的内容!

keyword:不分词,没有把es中的对象进行分词处理,而是存入了整个对象!

这时候当然可以进行完整地查询!默认是256个字符!

作者:香山上的麻雀

链接:https://www.jianshu.com/p/1189ff372c38

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文:https://www.cnblogs.com/sanduzxcvbnm/p/12177377.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值