Elasticsearch(4)

Elasticsearch映射

文章目录


官方文档

一、ElasticSearch6去掉type的概念

关系数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,但ES中不是这样的。elasticsearch是基于Lucene开发的搜索引擎,而Es中不同type下名称相同的field最终在Lucene中的处理方式是一样的

  • 两个不同type下的user-name,在es同一个索引下其实被认为是同一个field,你必须在不同的type中定义相同的field映射。否则,不同type中的相同字段名称就会在处理时出现冲突的情况,导致Lucene处理效率下降
  • Elasticsearch 7.X
    • URL中的type参数可选。比如,索引一个文档不再要求提供文档类型
  • Elasticsearch 8.X
    • 不再支持URL中的type参数
  • 解决:将索引从多类型迁移到但类型,每种类型文档一个索引

相关文档

二、Mapping(映射)

Mapping是用来定义一个文档,以及它所包含的属性是如何存储和索引的。比如,使用mapping来定义:

  • 哪些字符串属性应该被看做全文本属性(full text fields)
  • 哪些属性包含数字,日期或者地理位置
  • 文档中的所有属性是否都能被索引
  • 日期的格式
  • 自定义映射规则来执行动态添加属性

三、查看映射

GET bank/_mapping

Elasticsearch(4)

【注意】text属性的field,都会有一个keyword子属性

四、创建映射

方法:PUT

格式

"mappings":{
    "properties": {
        "TYPE_NAME":{"type":"TYPE_DATA_NAME"},
        ...
    }
}

实例

# 创建映射
PUT /my_index
{
  "mappings":{
    "properties": {
      "age":{"type":"integer"},
      "name":{"type": "text"},
      "email":{"type": "keyword"}
    }
  }
}

Elasticsearch(4)

五、添加新的映射字段

# 添加新的映射
PUT my_index/_mapping
{
  "properties": {
    "employee-id":{
      "type": "keyword",
      "index": false  //控制该字段能不能被检索,默认为True
    }
  }
}

Elasticsearch(4)

六、更新映射

不能修改映射,只能新建一个索引和映射关系,并将旧的数据迁移过去

1. 创建新索引

方法:PUT

## 创建新的索引
PUT newbank
{
  "mappings": {
    "properties": {
      "account_number": {
        "type": "long"
      },
      "address": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "balance": {
        "type": "long"
      },
      "city": {
        "type": "keyword"
      },
      "email": {
        "type": "keyword"
      },
      "employer": {
        "type": "keyword"
      },
      "firstname": {
        "type": "text"
      },
      "gender": {
        "type": "keyword"
      },
      "lastname": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "state": {
        "type": "keyword"
      }
    }
  }
}

2. 数据迁移

方法:POST

## 进行数据迁移
### 6.0以后的版本
POST _reindex
{
    "source":{
        "index":"bank"
    },
    "dest":{
        "index":"new_bank"
    }
}

### 老版本
POST _reindex
{
    "source":{
        "index":"bank",
        "type":"account"
    },
    "dest":{
        "index":"new_bank"
    }
}

Elasticsearch(4)

七、分词

看下章

上一篇:selenium grid自动化测试全过程


下一篇:ElasticSearch索引字段检索时使其不区分大小写