谷粒商城实战笔记-119~121-全文检索-ElasticSearch-mapping

文章目录

一,119-全文检索-ElasticSearch-映射-mapping创建

1,Elasticsearch7开始不支持类型type。

这意味着,在创建索引时,不需要指定type

2,mapping

索引就像是MySQL等关系数据库的表一样,而表是有表结构的,表结构有字段名词和自动类型组成。

Elasticsearch的索引也有类似的概念,但和MySQ的表结构有些区别:

  • 索引的结构称之为mapping
  • mapping不必提前创建,Elasticsearch会在导入数据时,依据具体的数据进行类型推断,自动创建mapping

2.1 Elasticsearch的Mapping

  • 定义:映射是Elasticsearch中定义索引的模式,它指定了索引中每个字段的数据类型和属性,如分析器(Analyzers)、是否可索引(index)、是否可存储(store)等。
  • 目的:映射用于优化搜索性能和定义数据如何被索引和搜索。
  • 类型 :Elasticsearch支持多种字段类型,包括textkeyworddateintegerfloatboolean等。
  • 分析器:Elasticsearch是为全文搜索优化的,字段可以指定不同的分析器来处理文本数据,如标准分析器、简单分析器等。
  • 动态映射:Elasticsearch支持动态映射,即在索引新类型的数据时,可以自动推断字段类型并创建映射。

示例:在创建索引时指定mapping

json 复制代码
PUT /my-index
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "date": {
        "type": "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}

二,120-全文检索-ElasticSearch-映射-添加新的字段映射

这一节的主要内容是如何修改索引的mapping。

但我们要修改一个已经存在的索引的mapping时,可用使用如下方式。

dart 复制代码
PUT /my_index/_mapping
{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}
  • PUT /my_index/_mapping:这是一个HTTP PUT请求,用于指定名为my_index的索引的映射。如果索引不存在,这个请求将创建索引并定义其映射;如果索引已经存在,它将更新现有的映射。

  • properties:这是映射定义中的一个关键部分,它包含了索引中所有字段的定义。

  • 'employee-id:这是字段的名称。

  • type:指定字段的数据类型。在这个例子中,keyword类型被指定,这意味着这个字段将用于精确匹配,并且不会进行全文搜索的分析。

  • index:这个属性指定字段是否应该被索引。在这个例子中,index被设置为false,表示employee-id字段的数据将不会被索引,因此不能被搜索,也即是这个字段不能作为搜索条件。这通常用于存储元数据或在文档中作为唯一标识符,但不需要进行搜索。

需要注意的是,对于mapping的更新,仅限于增加新的字段,不能修改已有字段的任何属性。

三,121-全文检索-ElasticSearch-映射-修改映射&数据迁移

正如前面所说,index索引的mapping是不能修改的。

如果一定要修改,只能重新创建一个索引,再把数据迁移到新索引。步骤如下:

  • 创建一个新索引,指定所需的mapping
  • 通过reindex将数据从旧索引迁移到新索引
  • 为新索引指定索引别名

以前面自动创建的索引bank为例,基于我们想要的mapping创建一个新的索引newbank

1,创建新索引newbank

dart 复制代码
PUT newbank
{
  "mappings" : {
      "properties" : {
        "account_number" : {
          "type" : "long"
        },
        "address" : {
          "type" : "text"
        },
        "age" : {
          "type" : "long"
        },
        "balance" : {
          "type" : "long"
        },
        "city" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "email" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "employer" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "firstname" : {
          "type" : "keyword"
        },
        "gender" : {
          "type" : "keyword"
        },
        "lastname" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "state" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
}

2,将旧索引数据迁移到新索引

dart 复制代码
POST /_reindex
{
  "source": {
    "index": "bank",
    "type": "acount"
  },
  "dest": {
    "index": "newbank"
  }
}

3,为新索引指定别名

dart 复制代码
POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "bank",
        "alias": "bank_alias" 
      }
    },
    {
      "add": {
        "index": "newbank",
        "alias": "bank_alias"
      }
    }
  ]
}

首先移除旧索引的别名,同时为新索引指定别名,这样在通过别名访问索引数据时,实际上访问的是新索引,这个变更的过程无需更新使用索引的引用程序。

当然,前提是旧索引有别名,且应用程序使用的是别名。

相关推荐
Wang's Blog2 小时前
PostgreSQL笔记60: 权限与角色管理——从层级体系到最佳实践
数据库·笔记·postgresql
Elastic 中国社区官方博客4 小时前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
大数据·运维·数据库·人工智能·elasticsearch·ai
IZero075 小时前
Elasticsearch 学习笔记筑基-文档操作篇
笔记·学习·elasticsearch
醉颜凉5 小时前
Elasticsearch 核心基石:倒排索引全解析(原理+结构+流程图+实战)
elasticsearch·jenkins·流程图
公爵爱学习6 小时前
安装Ubuntu20.04遇到的问题 简要简述笔记
笔记
醉颜凉6 小时前
Elasticsearch底层原理:文档更新与删除完整执行流程深度剖析
大数据·elasticsearch·jenkins
Wang's Blog8 小时前
PostgreSQL笔记28: PostgreSQL ACID 特性与实现机制深度解析
大数据·笔记·postgresql
u0103055278 小时前
正则表达式find与matches区别详解
笔记
浪兎兎8 小时前
Nginx 笔记
运维·笔记·nginx
_Narcissus_9 小时前
二分算法笔记及例题
数据结构·c++·笔记·算法·蓝桥杯·查找·二分算法