关于ES字符串类型(Text vs keyword)的选择
2017-11-20 14:08
423 查看
关于ES字符串类型的选择
ElasticSearch 5.0以后,string类型有重大变更,移除了string类型,
string字段被拆分成两种新的数据类型:
text用于全文搜索的,而
keyword用于关键词搜索。
ElasticSearch字符串将默认被同时映射成
text和
keyword类型,将会自动创建下面的动态映射(dynamic
mappings):
{ "foo": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } |
Text vs. keyword
Text:会分词,然后进行索引支持模糊、精确查询
不支持聚合
keyword:不进行分词,直接索引
支持模糊、精确查询
支持聚合
由于接口中有的需要源字段,而有的需要keyword字段,需要前后端做判断,十分繁琐且很难保持接口统一。
测试
Mapping{ "order": 0, "version": 50001, "template": "test", "settings": { "index": { "refresh_interval": "5s" } }, "mappings": { "website": { "_all": { "norms": false, "enabled": true }, "properties": { "@timestamp": { "include_in_all": false, "type": "date" }, "keytrue": { "index": true, "type": "keyword" }, "keyfalse": { "index": false, "type": "keyword" }, "textfalse": { 4000 "index": false, "type": "text" }, "texttrue": { "index": true, "type": "text" } } } }, "aliases": {} } |
PUT /test/test/1 { "@timestamp":1511147712941, "keytrue":"test keytrue", "keyfalse":"test keyfalse", "texttrue":"test texttrue", "textfalse":"test textfalse" } |
name | format | searchable | aggregatable | |
keyfalse | string | | | √ |
keytrue | string | | √ | √ |
textfalse | string | | | |
textfalse.keyword | string | | √ | √ |
texttrue | string | | √ | |
texttrue.keyword | string | | √ | √ |
条件 | |
keytrue : "test keytrue" | √ |
keytrue : "test" | |
keyfalse | |
textfalse | |
textfalse.keyword : "test textfalse" | √ |
textfalse.keyword : "test" | |
texttrue : "test texttrue" | √ |
texttrue : "test" | √ |
texttrue.keyword : "test texttrue " | √ |
texttrue.keyword : "test" | |
结论
keyword类型满足目前系统的需求,且能保证接口统一,所以建议将查询、聚合中涉及的字符串类型,在mapping中设置为“keyword”。相关文章推荐
- 扩展:关于ES字符串类型(Text vs keyword)的选择
- 关于mybatis读取数据库字段text类型时,读出数据为地址,并不是字符串的问题
- Java 中 关于字符串类型的转换
- android 关于选择图片,判断图片的类型
- 选择合适的数据类型char和varchar , text和blob,浮点数(float)和定点数(decimal),日期类型选择,字符集的选择
- 关于获取text类型value的一个小问题
- 类库-----一些经常用到的对控件的处理1. 获取文本框中输入内容2.清除文本框内容3. 获取下拉列表框中选择内容,类型0为Text值,类型1为Value值4.DropDownList绑定日期
- 关于string类型的字符串是否以\0结尾
- 关于值类型、引用类型和字符串类型的比较问题!通过实例来说明!
- 关于css未被载入问题--->因为它的 MIME 类型 "text/html" 不是 "text/css"。
- 选择合适的数据类型char和varchar , text和blob,浮点数(float)和定点数(decimal),日期类型选择,字符集的选择
- 关于MYSQL编程使用VS2015编译报“LNK4272库计算机类型“X86”与目标计算机类型“x64”冲突”的解决办法
- Related to Oracle SQL 关于检验字符串是否为数字类型的方法
- 关于SQL Server中将数值类型转换为字符串的问题(转)
- (7)字符串类型:varchar、char、text、enum和set(不常用)
- 关于字符串数据转化为float类型的问题
- 关于ArcGIS建模工具的选择:Case Tool VS. ArcGIS Diagrammer
- 关于存储过程与text类型之间关系
- 选择合适的数据类型char和varchar , text和blob,浮点数(float)和定点数(decimal),日期类型选择,字符集的选择
- AJAX第一步:AJAX接收返回类型为text/html的字符串数据