ElasticSearch 常用数据结构
字符串类型
字符串类型:是ES最常用的类型之一。其内部使用了倒排索引算法。目前有两类字符串类型:text、keyword。
基础概念
- Keyword 类型:用于索引结构化内容(例如ID、电子邮件地址),默认不分词,应用场景:精准匹配、排序、聚合分析。
- Text 类型:用于全文检索领域(例如电子邮件内容、日志内容等),默认进行分词,应用场景:全文检索领域。
实践
-
Keyword
1.创建mapping(定义数据结构)
POST test_datafields/_mappings
{
"mappings":{
"properties": {
"age": {
"type" : "integer"
},
"address": {
"type": "text"
},
"name": {
"type": "keyword"
},
"address_keyword": {
"type": "keyword"
}
}
}
}
2.插入数据
POST test_datafields/_doc/
{
"age": 15,
"address": "北京市朝阳区三元桥3号院8楼",
"address_keyword": "北京市朝阳区三元桥3号院8楼",
"name": "张三"
}
3.查询数据
GET test_datafields/_search
{
"query": {
"term":{
"name":"张三"
}
}
}
4.结果展示
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "test_datafields",
"_type": "_doc",
"_id": "aBD4GnsBUV1ZBCOyb3ch",
"_score": 0.2876821,
"_source": {
"age": 15,
"address": "北京市朝阳区三元桥3号院8楼",
"name": "张三"
}
}
]
}
}
- Text
使用和keyword同样的mapping和索引数据(address 为text类型)
-
查询数据(针对address 和 address_keyword 两个字段同时进行全文检索,其中后者为keyword类型)
GET test_datafields/_search { "query": { "match":{ "address":"朝阳区" } } } GET test_datafields/_search { "query": { "match":{ "address_keyword":"朝阳区" } } }
-
查询结果
使用 text类型的address 查询结果: { "_index": "test_datafields", "_type": "_doc", "_id": "-S4EG3sBSlQWAH8t7Wz-", "_score": 0.8630463, "_source": { "age": 15, "address": "北京市朝阳区三元桥3号院8楼", "address_keyword": "北京市朝阳区三元桥3号院8楼", "name": "张三" } } 使用 keyword类型的address_keyword 查询结果: { }
整型数值类型
基础概念
整型数值类型同样是ES最常用的类型之一,种类多样,应用场景广泛,可以根据实际需求来进行选择,提升资源利用率。
主要分类
类型名称 | 数值范围 | 空间占用 |
---|---|---|
long | -2^63 ~ 2^63-1 | 64bit |
Integer | -2^31 ~ 2^31-1 | 32bit |
short | -32768~32767 | 16bit |
byte | -128~127 | 8bit |
浮点数值类型
基础概念
浮点数主要有以下四种,一般来说看数值范围是否够用选取最经济的为准。
主要分类
类型名称 | 空间占用 |
---|---|
double | 64bit |
float | 32bit |
half_float | 16bit |
scaled_float | 64bit |