ES索引的映射关系
Elasticsearch的索引映射关系(mapping)定义了每个字段的数据类型、字段名、字段的各种属性(如是否被索引、分词器等)。它相当于数据库中的表结构,用来描述文档中字段的类型和行为。下面是映射关系的一些核心概念和常用属性:
- 字段类型:
text
: 用于全文搜索的字符串数据,通常会进行分词处理。keyword
: 不进行分词的字符串,适合精确匹配查询。long
、integer
、short
、byte
: 各种整数类型。float
、double
: 浮点数类型。boolean
: 布尔类型。date
: 日期类型,可以配置日期格式。object
: 对象类型,用于嵌套结构。nested
: 嵌套对象类型,允许嵌套查询。
- 字段属性:
index
: 指定字段是否被索引,true
或false
。false
表示字段不参与搜索。analyzer
: 针对text
类型字段,定义分词器(例如标准分词器standard
)。doc_values
: 针对keyword
、numeric
类型字段,默认启用,用于排序、聚合等操作。format
: 对date
类型字段,定义日期的格式。
- 动态映射:
dynamic
: 可以设置为true
、false
或strict
。默认情况下,Elasticsearch可以动态推断字段类型,但你可以关闭或严格限制这种行为。
创建索引时指定映射关系(时间)
PUT 10.0.0.101:9200/es-data
{
"mappings": {
"properties": {
"birthday": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
### 查看
#### 创建模拟数据
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "es-data"} }
{ "name": "李","birthday": "2002-10-01" }
{ "create": { "_index": "es-data"} }
{ "name": "朱","birthday": "1996-05-01" }
{ "create": { "_index": "es-data"} }
{ "name": "振亚","birthday": "1996-05-01" }
#### 查看
#### 根据时间日期大小来排序
GET 10.0.0.101:9200/es-data/_search
{
"sort": { "birthday": "asc"}
}
-------
{
"sort": { "birthday": "desc"}
}
实战 创建多个索引 (test,keyword,ip,date)
创建索引
10.0.0.101:9200/es009
为已创建的索引修改数据类型
PUT 10.0.0.101:9200/es-009/_mapping
{
"properties": {
"name": {
"type": "text",
"index": true
},
"gender": {
"type": "keyword",
"index": true
},
"province": {
"type": "keyword",
"index": true
},
"city": {
"type": "keyword",
"index": false
},
"email": {
"type": "keyword"
},
"ip_addr": {
"type": "ip"
},
"birthday": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
添加数据
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "es-009"}}
{ "name": "吴明昆","gender":"男性的","telephone":"1111111111","province":"广西","city":"北海市","email":"wumingkun.com","ip_addr":"192.168.25.201","birthday":"1999-04-05"}
{ "create": { "_index": "es-009"}}
{ "name": "蒋相宇","gender":"女性的","telephone":"222222222","province":"河南","city":"濮阳市","email":"jiangxiangyu.com","ip_addr":"192.168.15.31","birthday":"2003-09-05","hobby":["抽烟","喝酒","烫头","足疗"]}
进行过滤搜索(gender)-- keyword类型
### 进行精准匹配
10.0.0.101:9200/es-009/_search
---- 无法查询
{
"query":{
"match":{
"gender": "女"
}
}
}
---- 可以查询
{
"query":{
"match":{
"gender": "女性的"
}
}
}
进行过滤搜索(name)-- text类型
#### 模糊匹配
10.0.0.101:9200/es-009/_search
{
"query":{
"match":{
"name": "明"
}
}
}
进行过滤搜索(IP)-- ip类型
#### 一个网段内
GET 10.0.0.101:9200/es-009/_search
{
"query": {
"match" : {
"ip_addr": "192.168.15.0/24"
}
}
}