ES索引的映射关系

Elasticsearch的索引映射关系(mapping)定义了每个字段的数据类型、字段名、字段的各种属性(如是否被索引、分词器等)。它相当于数据库中的表结构,用来描述文档中字段的类型和行为。下面是映射关系的一些核心概念和常用属性:

  1. 字段类型
    • text: 用于全文搜索的字符串数据,通常会进行分词处理。
    • keyword: 不进行分词的字符串,适合精确匹配查询。
    • longintegershortbyte: 各种整数类型。
    • floatdouble: 浮点数类型。
    • boolean: 布尔类型。
    • date: 日期类型,可以配置日期格式。
    • object: 对象类型,用于嵌套结构。
    • nested: 嵌套对象类型,允许嵌套查询。
  2. 字段属性
    • index: 指定字段是否被索引,truefalsefalse 表示字段不参与搜索。
    • analyzer: 针对 text 类型字段,定义分词器(例如标准分词器 standard)。
    • doc_values: 针对 keywordnumeric 类型字段,默认启用,用于排序、聚合等操作。
    • format: 对 date 类型字段,定义日期的格式。
  3. 动态映射
    • dynamic: 可以设置为 truefalsestrict。默认情况下,Elasticsearch可以动态推断字段类型,但你可以关闭或严格限制这种行为。

创建索引时指定映射关系(时间)

PUT 10.0.0.101:9200/es-data
{
  "mappings": {
    "properties": {
      "birthday": {
        "type":   "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}

image-20241005153229794

### 查看

image-20241005153335692

#### 创建模拟数据
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" }

#### 查看

image-20241005153722716

#### 根据时间日期大小来排序
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": "女性的"
        }
    }
}

image-20241005155737880

进行过滤搜索(name)-- text类型

#### 模糊匹配
10.0.0.101:9200/es-009/_search
{
    "query":{
        "match":{
            "name": "明"
        }
    }
}

image-20241005155910932

进行过滤搜索(IP)-- ip类型

#### 一个网段内
GET 10.0.0.101:9200/es-009/_search
{
    "query": {
        "match" : {
            "ip_addr": "192.168.15.0/24"
        }
    }
}

image-20241005160022454