当前位置: 首页 > news >正文

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

文章目录

  • 一,119-全文检索-ElasticSearch-映射-mapping创建
    • 1,Elasticsearch7开始不支持类型type。
    • 2,mapping
      • 2.1 Elasticsearch的Mapping
  • 二,120-全文检索-ElasticSearch-映射-添加新的字段映射
  • 三,121-全文检索-ElasticSearch-映射-修改映射&数据迁移
    • 1,创建新索引newbank
    • 2,将旧索引数据迁移到新索引
    • 3,为新索引指定别名

一,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

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

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

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

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

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

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,将旧索引数据迁移到新索引

POST /_reindex
{"source": {"index": "bank","type": "acount"},"dest": {"index": "newbank"}
}

3,为新索引指定别名

POST /_aliases
{"actions": [{"remove": {"index": "bank","alias": "bank_alias" }},{"add": {"index": "newbank","alias": "bank_alias"}}]
}

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++中string类常用函数的用法介绍
  • K个一组翻转链表(LeetCode)
  • 七天打造一套量化交易系统:Day8-阶段性总结、未完待续...
  • 为什么concurrenthashmap的segment要设计成可重入锁?
  • Linux源码阅读笔记13-进程通信组件中
  • 大厂linux面试题攻略五之数据库管理
  • delphi 12 学习如何登陆网站下载文件
  • 消息队列:Kafka吞吐量为什么比RocketMQ大
  • 3.特征工程-特征抽取、特征预处理、特征降维
  • 第一阶段面试问题(后半部分)
  • java之IO篇——File、字节流、字符流
  • 【IO】使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上一份
  • 新书速览|AI创意商业广告设计:Adobe Firefly + Photoshop
  • 现代前端架构介绍(第一部分):App是如何由不同的构建块构成的
  • 数据中台建设之数据汇聚与数据交换
  • 77. Combinations
  • Bytom交易说明(账户管理模式)
  • java正则表式的使用
  • Promise面试题,控制异步流程
  • Quartz初级教程
  • Ruby 2.x 源代码分析:扩展 概述
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • WebSocket使用
  • Yii源码解读-服务定位器(Service Locator)
  • 大整数乘法-表格法
  • 观察者模式实现非直接耦合
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • ------- 计算机网络基础
  • 那些年我们用过的显示性能指标
  • 漂亮刷新控件-iOS
  • 前端_面试
  • 时间复杂度与空间复杂度分析
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • puppet连载22:define用法
  • 大数据全解:定义、价值及挑战
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # include “ “ 和 # include < >两者的区别
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ### RabbitMQ五种工作模式:
  • #pragma multi_compile #pragma shader_feature
  • $.ajax中的eval及dataType
  • (1)svelte 教程:hello world
  • (9)STL算法之逆转旋转
  • (day18) leetcode 204.计数质数
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (三)c52学习之旅-点亮LED灯
  • (四) Graphivz 颜色选择
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)原始图像数据和PDF中的图像数据