深入解析Elasticsearch 8.4.1:Mapping与字段类型实战指南

标题Elasticsearch8.4.1常见字段类型介绍

Mapping概述

在Elasticsearch中,Mapping定义了索引中每个字段的类型、属性以及设置。Mapping的作用是告诉Elasticsearch如何索引文档中的字段,包括如何分析字段值以及如何存储它们。

常见字段类型

字符串类型
  • text:文本类型,存储的内容会被分词器处理,生成多个词根并存储在倒排索引中,支持全文搜索。

  • keyword:关键字类型,存储的内容不会被分词器处理,整个内容被当作一个词根存储在倒排索引中,支持精确值搜索。

  • 数字类型

    • long:64位长整型,取值范围为-263~263-1。
    • integer:32位整型,取值范围为-231~231-1。
    • short:16位短整型,取值范围为-32,768~32,767。
    • byte:8位字节型,取值范围为-128~127。
    • double:64位双精度浮点型。
    • float:32位单精度浮点型。
    • half_float:16位半精度浮点型。
    • scaled_float:缩放类型的浮点数,底层基于long存储,支持一个固定的精度因子。
日期类型(date)

存储日期格式的字符串或自1970-01-01以来的毫秒数。

布尔类型(boolean)
取值为true、false或"true"、"false"。
范围类型(range)
支持integer_range、float_range、double_range、date_range、ip_range等范围类型。
复合类型
  • 数组类型(array):支持任意字段类型的数组。
  • 对象类型(object):存储类似JSON具有层级的数据。
  • 嵌套类型(nested):支持数组类型的对象(Array[Object]),可层层嵌套。
地理类型
地理坐标类型(geo_point):用于存储地理坐标点。
地理地图(geo_shape):用于存储复杂地理形状,如多边形、线等。
特殊类型
- IP类型(ip):用于存储IP地址。
- completion类型:使用fst有限状态机来提供suggest前缀查询功能。
- token_count类型:提供token级别的计数功能。
- mapper-murmur3类型:安装插件后,可支持_size统计_source数据的大小。
- attachment类型:用于索引文件附件的内容。
- percolator类型:用于预定义的查询条件与文档进行匹配。
二进制类型(binary)
用于存储二进制数据,存储前需要先用Base64进行编码。

指定索引库字段类型mapping


PUT /mall-shop_1
{
  "mappings": {
    "properties": {
       "id":{
      "type":"keyword"
      },
      "title":{
        "type":"text"
      },
      "price":{
        "type":"float"
      }
    }
  }
}
最高频使用的数据类型
  • text字段类型

    • text类型主要用于全文本搜索,适合存储需要进行全文本分词的文本内容,如文章、新闻等。

    • text字段会对文本内容进行分词处理,将文本拆分成独立的词项(tokens)进行索引

    • 分词的结果会建立倒排索引,使搜索更加灵活和高效。

    • text字段在搜索时会根据分词结果进行匹配,并计算相关性得分,以便返回最佳匹配的结果。

  • keyword字段类型

    • keyword类型主要用于精确匹配和聚合操作,适合存储不需要分词的精确值,如ID、标签、关键字等。

    • keyword字段不会进行分词处理,而是将整个字段作为一个整体进行索引和搜索

    • 这使得搜索只能从精确的值进行匹配,而不能根据词项对内容进行模糊检索。

    • keyword字段适合用于过滤和精确匹配,同时可以进行快速的基于精确值的聚合操作。

  • 总结

    • 在选择text字段类型和keyword字段类型时,需要根据具体的需求进行权衡和选择:

    • 如果需要进行全文本检索,并且希望根据分词结果计算相关性得分,以获得最佳的匹配结果,则选择text字段类型。

    • 如果需要进行精确匹配、排序或聚合操作,并且不需要对内容进行分词,则选择keyword字段类型。

创建索引并插入文档

创建索引
PUT /mall-shop_2
{
  "mappings": {
    "properties": {
      "title":{
        "type": "text"
      },
      "tags":{
        "type": "keyword"
      },
      "publish_date":{
        "type": "date"
      },
      "rating":{
        "type": "float"
      },
       "is_published":{
         "type": "boolean"
      },
      "author":{
        "properties": {
          "name":{
            "type":"text"
          },
          "age":{
            "type":"integer"
          }
        }
      },
      "comments":{
        "type": "nested",
        "properties": {
          "user":{
            "type":"keyword"
          },
          "message":{
            "type":"text"
          }
        }
      }
    }
  }
}
插入文档
PUT /mall-shop_2/_doc/1
{
  "title":"study elasticsearch 8.4.1",
  "tags":["study","elasticsearch","kibana"],
  "publish_date":"2024-06-24",
  "rating":4.5,
  "is_published":true,
  "author":{
      "name":"lifly",
      "age":18
    },
    "comments":[
        {
          "user":"jack",
          "message":"hi my name is jack"
        },
        {
          "user":"tom",
          "message":"hello everyone ,I am tom"
        }
      
      ]
}
查询文档
GET /mall-shop_2/_mapping

查询结果

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "mall-shop_2",
        "_id": "1",
        "_score": 1,
        "_source": {
          "title": "study elasticsearch 8.4.1",
          "tags": [
            "study",
            "elasticsearch",
            "kibana"
          ],
          "publish_date": "2024-06-24",
          "rating": 4.5,
          "is_published": true,
          "author": {
            "name": "lifly",
            "age": 18
          },
          "comments": [
            {
              "user": "jack",
              "message": "hi my name is jack"
            },
            {
              "user": "tom",
              "message": "hello everyone ,I am tom"
            }
          ]
        }
      }
    ]
  }
}

根据关键词查询

GET /mall-shop_2/_search
{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}
​```

**查询结果**

```shell
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.2876821,
    "hits": [
      {
        "_index": "mall-shop_2",
        "_id": "1",
        "_score": 0.2876821,
        "_source": {
          "title": "study elasticsearch 8.4.1",
          "tags": [
            "study",
            "elasticsearch",
            "kibana"
          ],
          "publish_date": "2024-06-24",
          "rating": 4.5,
          "is_published": true,
          "author": {
            "name": "lifly",
            "age": 18
          },
          "comments": [
            {
              "user": "jack",
              "message": "hi my name is jack"
            },
            {
              "user": "tom",
              "message": "hello everyone ,I am tom"
            }
          ]
        }
      }
    ]
  }
}

elasticsearch搜索引擎分词和默认分词器

什么是搜索引擎的分词
  • 分词即使将文本拆分成单独的单次或词项的过程

  • 分词是搜索引擎在建立索引和执行查询时的关键步骤,将文本拆分成单词,并构建倒排索引,可以实现更好的搜索和检索效果。

  • 分词规则是指如何将文本进行拆分的规则和算法。

  • elasticsearch使用一些列的分词器(analyzer)和标记器(tokenizer)来处理文本内容。

分词过程
  • 标记化(Tokenization):

    • 分词的第一步是将文本内容拆分成单个标记(tokens),标记可以是单词、数字、特殊字符等。

    • 标记化过程由标记器(tokenizer)执行,标记器根据一组规则将文本切分为标记。

  • 过滤(Filtering):

    • 标记化后,标记会进一步被过滤器(filters)处理。

    • 过滤器执行各种转换和操作,如转换为小写、去除停用词(stop words),词干提取(stemming),同义词扩展等。

  • 倒排索引(Inverted Indexing):

    • 分词处理完成后,Elasticsearch使用倒排索引(inverted index)来存储分词结果。

    • 倒排索引是一种数据结构,通过将标记与其所属文档进行映射,快速确定包含特定标记的文档。

  • 查询匹配:

    • 当执行查询时,查询的文本也会进行分词处理。

    • Elasticsearch会利用倒排索引来快速查找包含查询标记的文档,并计算相关性得分。

常见的分词介绍

  • Standard分词器:
    • 特点:Standard分词器是许多文本处理工具(如Elasticsearch和HanLP)中的默认分词器。它基于词典和规则进行分词,将输入的句子切分成一个个独立的词语。
    • 支持:中英文混合分词,支持去除空格和标点符号,以及用户自定义词典。
    • 应用:适用于一般性的文本处理任务,如全文搜索、文本分析等。
  • Simple分词器:
    • 特点:Simple分词器主要根据非字母字符将文本拆分为词项,并将词项转换为小写。
    • 支持:不进行标点符号和停用词的过滤。
    • 应用:在需要简单、快速分词的场景下使用,如日志分析、简单文本处理等。
  • Whitespace分词器:
    • 特点:Whitespace分词器根据空格字符将文本拆分为词项,不进行任何大小写转换、标点符号过滤或停用词过滤。
    • 支持:保持原始文本中的空格和标点符号,适用于对空格敏感的文本处理任务。
    • 应用:在处理结构化文本(如CSV文件)或需要保留原始格式信息的场景下使用。
  • IK分词器:
    • 特点:IK分词器是一个专门为中文设计的分词器,支持细粒度和智能化的中文分词。
    • 功能:支持多种分词模式(如最大化分词模式、最小化分词模式、智能分词模式等),并允许用户自定义词典以适应特定场景和行业需求。
    • 应用:在需要精确处理中文文本的搜索引擎、推荐系统、自然语言处理等领域广泛应用。
  • 自定义分词器:
    • 特点:自定义分词器允许用户根据自己的需求定义分词规则和处理逻辑。
    • 支持:用户可以根据特定场景或任务的需要,定制分词器的行为,如添加自定义词典、定义特定的切词规则等。
    • 应用:在需要处理特殊文本(如行业术语、专业词汇等)或实现特殊功能的场景下使用。通过自定义分词器,可以更好地满足特定任务的需求,提高分词效果和搜索结果的相关性。
Strandard分词
POST /mall-shop_2/_analyze
{
  "field": "title",
  "text": "总有人会离开"
}

在这里插入图片描述

Simple分词
POST /mall-shop_2/_analyze
{
  "analyzer": "simple",
  "text": "study elasticsearch 8.4.1"
}

在这里插入图片描述

ik分词器
  • ik_smart:会做最粗粒度的拆分
  • ik_max_word(常用):会将文本做最细力度的拆分
POST /mall-shop_2/_analyze
{
  "analyzer": "ik_smart",
  "text": "总有人会离开"
}

在这里插入图片描述

POST /mall-shop_2/_analyze
{
  "analyzer": "ik_max_word",
  "text": "总有人会离开"
}

在这里插入图片描述

本文全方位探讨了Elasticsearch 8.4.1中Mapping的定义及其关键作用,详尽介绍了各类常见字段类型的应用场景与特性,从基础的字符串、数字类型到复杂的地理空间类型,再到特殊用途的如Completion与Percolator类型,为开发者构建高效索引提供了坚实的基础。通过实践案例,展示了如何定义索引的Mapping、插入文档以及执行查询的具体过程,深刻阐述了text与keyword字段类型的选择原则,以及它们在全文搜索与精确匹配中的不同应用场景。

此外,我们还深入分析了Elasticsearch的分词机制,探讨了标准分词器、简易分词器、空白分词器以及强大的IK分词器等,揭示了它们各自的特点与适用场景,并通过实例演示了如何使用不同的分词器对文本进行分析,这对于优化搜索性能和提升查询准确性至关重要。

总之,理解并熟练运用Elasticsearch的Mapping配置与字段类型,以及掌握其强大的分词功能,是提升搜索质量和用户体验的关键。希望本文能成为你深入探索Elasticsearch之旅的有力指南,助你在构建高性能搜索引擎的道路上更进一步。

更多精彩请关注以下公众号
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/743482.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

el-progress进度条,format效果实现

需要实现如下效果图: 实现的需求是,取数组对象里面,amount最大的值作为100%,其余按照这个标准进行计算得到显示的进度条百分比 <template><div class="app-container"> <div class="chart-container"><el-row :gutter="1…

睡眠剥夺对记忆巩固的神经生物学影响

近期&#xff0c;《自然》杂志刊载的研究揭示了睡眠不足对记忆相关神经信号的不利影响&#xff0c;强调了即使在后续恢复充分睡眠的情况下&#xff0c;这种损害亦难以完全逆转。 神经元作为大脑的基本功能单位&#xff0c;其活动并非孤立进行&#xff0c;而是通过复杂的网络连接…

Day45

Day45 jQuery动画 显示和隐藏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script src"js/jquery-1.8.2.js" type"text/javascript" charset"utf-8"></script&…

Webpack: 借助 Babel+TS+ESLint 构建现代 JS 工程环境

概述 Webpack 场景下处理 JavaScript 的三种常用工具&#xff1a;Babel、TypeScript、ESLint 的历史背景、功能以及接入 Webpack 的步骤借助这些工具&#xff0c;我们能构建出更健壮、优雅的 JavaScript 应用 使用 Babel ECMAScript 6.0(简称 ES6) 版本补充了大量提升 JavaSc…

【Linux】进程 | 控制块pcb | task_struct | 创建子进程fork

目录 Ⅰ. 进程的概念&#xff08;Process&#xff09; 1. 什么是进程&#xff1f; 2. 多进程管理 3. 进程控制块&#xff08;PCB&#xff09; task_struct 的结构 Ⅱ. 进程查看与管理 1. 使用指令查看进程 2. /proc 查看进程信息 3. 获取进程 ID 4. 创建子进程 原因…

Vue2-表单与v-model

1.Vue表单使用 表单输入绑定&#xff1a;表单输入绑定 — Vue.js #v-model双向数据绑定new Vue({template: <div>/* 用户修改 , vue-data数据同步修改(内存) */<input v-model"message" placeholder"edit..."><p>message: {{message}}&…

2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024,8月2日-4)

2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVISP 2024&#xff09;将于2024年8月2-4日在中国厦门召开。ICVISP 2024将围绕“虚拟现实、图像和信号处理”的最新研究领域&#xff0c; 为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提…

Python 参数类型

一 理解Python中的Parameters & Arguments Parameters&#xff1a;形参 Arguments&#xff1a;实参 二 Python的实参&#xff08;Arguments&#xff09;类型 实参类型总结 位置参数&#xff08;Positional Arguments&#xff09; &#xff1a;函数调用时通过入参的顺序来…

Younger 数据集:人工智能生成神经网络

设计和优化神经网络架构通常需要广泛的专业知识&#xff0c;从手工设计开始&#xff0c;然后进行手动或自动化的精细化改进。这种依赖性成为快速创新的重要障碍。认识到从头开始自动生成神经网络架构的复杂性&#xff0c;本文引入了Younger&#xff0c;这是一个开创性的数据集&…

【Unity】RPG2D龙城纷争(五)关卡编辑器之地图编辑

更新日期&#xff1a;2024年6月25日。 项目源码&#xff1a;本章发布 索引 简介关卡编辑器窗口类&#xff08;LevelEditor&#xff09;一、定义关卡编辑器窗口类二、两种编辑模式三、地块编辑模式1.关卡模板2.打开编辑窗口3.编辑器基本属性4.地块模板5.重新生成地图6.地图刷子7…

基于优化包络相关的Loran-C(罗兰C)信号天地波识别算法及MATLAB仿真代码和实测信号处理

引言 Loran-C接收信号处理中&#xff0c;完成信号的捕获后需要进行信号的跟踪&#xff0c;Loran-C信号的跟踪按照信号处理流程分为天地波识别、周期识别和正向过零点跟踪三个步骤。Loran-C信号通过天波和地波两种方式到达接收点&#xff0c;导致接收到信号为地波和天波的合成信…

YOLOv5改进(八)--引入Soft-NMS非极大值抑制

文章目录 1、前言2、各类NMS代码实现2.1、general.py 3、各类NMS实现3.1、Soft-NMS3.2、GIoU-NMS3.3、DIoU-NMS3.4、CIoU-NMS3.5、EIoU-NMS 4、目标检测系列文章 1、前言 目前yolov5使用的是NMS进行极大值抑制&#xff0c;本篇文章是要将各类NMS添加到yolov5中&#xff0c;同时…

性能优化-布局优化

性能优化-布局优化 屏幕的UI刷新机制 布局的选择 优化控件的使用 原生View的优化 1、屏幕的UI刷新机制 超过16ms会感觉卡顿&#xff0c; 刷新率&#xff08;Refresh Rate&#xff09;&#xff1a;指一秒内刷新屏幕的次数&#xff0c;例如60HZ&#xff1b; 帧率&#xff08;F…

菲律宾媒体PR发稿:谷歌SEO优化.关键词排名.谷歌收录

1. 引言 在菲律宾&#xff0c;媒体行业的发展日新月异&#xff0c;尤其是在线媒体。为了在这个竞争激烈的市场中脱颖而出&#xff0c;各家媒体纷纷寻求谷歌SEO优化、提升关键词排名和增加谷歌收录的方法。本文将围绕菲律宾的几大主要在线媒体&#xff0c;如菲律宾在线日志Jour…

优化系统小工具

一款利用VB6编写的系统优化小工具&#xff0c;系统优化、桌面优化、清理垃圾、查找文件等功能。 下载:https://download.csdn.net/download/ty5858/89432367

WPS复制后转置粘贴

1. WPS复制后转置粘贴 复制-》右键-》顶部第一行-》粘贴行列转置&#xff0c;如下图&#xff1a; 2. Excel office365 本地版 2. Excel office365 在线版

孙子兵法的笔记

系列文章目录 孙子兵法的笔记 三十六计的笔记 文章目录 系列文章目录1、始计第一【原文】【译文】 1、始计第一 用兵始于计谋&#xff0c;善善策出自“庙算”&#xff0c;而精确的“庙算”又来自对各种因素的侦测考察。 孙子在第一章中非常具体地提出了“五事”“七计”的考察标…

缓冲池管理器

开发环境搭建 克隆 git clone https://github.com/cmu-db/bustub.git cd bustub/ 切换分支 git checkout -b branchname v20221128-2022fall 创建docker镜像 docker build . -t bustub_img 创建容器 docker create -it --name bustub_container -v “E:/cmu/bustub”:“/bustu…

自然语言处理课程论文:《Attention is all you need》复现与解读

目录 1.背景介绍 1.1 文献介绍 1.2 研究背景 1.3 知识概述 1.3.1 机器翻译 1.3.2 attention机制与self-attention机制 2.数据来源与处理 2.1 数据集描述 2.2 数据处理 3. 模型架构 ​​​​​​​3.1 Positional Embedding ​​​​​​​3.2 Multi-Head Attention ​​​​​…

[UE虚幻引擎] DTSpeechVoice 文字转语音播放 插件说明

本插件可以在UE中使用蓝图把文本转成语音播放&#xff0c;播放的声音引擎是使用Windows自带的语音引擎&#xff0c;支持Win10&#xff0c;Win11。 系统设置 首先确认电脑是否有语音系统&#xff0c;一般正常安装的电脑都是自带的。 如果要播放多语言的&#xff0c;请自己下载其…