谷粒商城实战笔记-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"
      }
    }
  ]
}

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

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

相关推荐
扶离_flee4 分钟前
麦田物语学习笔记:构建游戏的时间系统
笔记·学习·游戏
古斯塔斯hugh5 分钟前
VUE学习笔记10__vue指令v-on配置method函数
vue.js·笔记·学习
正小安26 分钟前
汇编语言:基于x86处理器考前笔记 | 第七章 整数运算
笔记
小华同学ai41 分钟前
Rnote:Star 8.6k,github上的宝藏项目,手绘与手写画图笔记,用它画图做笔记超丝滑,值得尝试!
笔记·github
xiaolin033342 分钟前
ElasticSearch下
数据库·elasticsearch
dal118网工任子仪1 小时前
58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
数据库·笔记·sql·学习·mysql
青椒大仙KI112 小时前
25/1/17 嵌入式笔记 STM32F103
笔记
SofterICer2 小时前
网络设备安全保证计划 (NESAS) - 供应商视角 笔记
网络·笔记·安全
s_little_monster2 小时前
【Linux】打破Linux神秘的面纱
linux·运维·经验分享·笔记·学习·学习方法
周杰伦_Jay3 小时前
人工智能领域单词:英文解释
人工智能·深度学习·神经网络·全文检索·中文分词