【Elasticsearch<二>✈️✈️】基本属性概念与MySQL数据库的不同之处

目录

🍸前言

🍻一、Elasticsearch 基本属性

        1.1 ES VS MySQL

        1.2 ES 属性概念

        1.3 ES 的增删改查

🍺二、自动补全场景

        2.1 场景举例

        2.2 使用数据分词器

        2.3 查询的流程

        2.4 整个查询流程图

 🍹章末


🍸前言

        上次初步了解到 Elasticsearch 的基本使用,并且完成 ES 服务安装, ES 服务浏览器插件安装, ES 可视化客户端安装,以及 IK 分词器的安装,踩了很多坑,好在全部解决了。基于以上安装配置,来熟悉下 ES 的各种属性。本地安装的链接如下:

【Elasticsearch<一>✈️✈️】简单安装使用以及各种踩坑-CSDN博客

🍻一、Elasticsearch 基本属性

        1.1 ES VS MySQL

        在具体使用之前,先了解下和我们常用数据库有哪些相似之处,常用的属性对比如下

        1.2 ES 属性概念

        索引(index):

  • Elasticsearch中的索引类似于数据库,承担容器的角色。一个索引可以包含多个文档,并且每个文档都有自己的类型和字段。

    类型(type):
  • 在较旧的版本中,类型类似于表,它们定义了索引中文档的结构和字段。在较新的Elasticsearch版本中,通常只有一个默认类型 "_doc"。也就是说一个索引下面建议只有一个类型。

    文档(document):
  • 文档类似于数据库中的行。每个文档都是一个JSON对象,包含了一系列字段和对应的值。

    字段(field):
  • 字段类似于数据库表中的列。每个字段都有一个名称和对应的值,值可以是各种类型的数据,如文本、数字、日期等。
        1.3 ES 的增删改查

        注:在实操之前,确保之前安装的服务都启动了

        1.3.1 PUT 请求,用于创建或者更新索引,使用如下,创建了一个新的索引,到浏览器插件中也可看到具体的索引库以及库中数据的详细信息

        my_first_index 创建的索引名称

        _doc 7.x版本默认的_type

        1 指定文档的id

        {} json 数据格式的内容,类似于<k,v>,一个键对应一个值

PUT /my_first_index/_doc/1
{"name":"第一个索引库","createtime":"2024.4.26"
}

     

        1.3.2 POST 请求, 类似于 PUT 请求,但是可以创建索引的时候不用指定文档 id,会生成一段字符作为默认文档 id,如下:通过插件也可以看到,随机生成的文档 id 是一个随机字符串

        注:创建或者修改的时候,索引或者类型命名不能包含大写字母,会报错

POST /my_first_index/_doc
{"name":"POST请求新增一条数据","createtime":"2024.4.26.14:00","title":"POST"
}

 

        1.3.3 GET 请求,获取索引库数据信息,如下:

        根据文档 id 查询某一条数据

GET /my_first_index/_doc/1

         查询某个索引库全部数据

GET /my_first_index/_search
{"query": {"match_all": {}}
}

 

 

        1.3.4 DELETE 请求 ,需要指定索引名称,如下:

🍺二、自动补全场景

        2.1 场景举例

        日常接触到的场景有很多,比如购物网站上输入”短袖“,可能会提示有”短袖 重磅“、”短袖 纯色“等等很多,其他很多网站上都可以遇到这种场景,比如经常逛的掘金社区,就以这个为模板,实操下,如下:

         2.2 使用数据分词器

        将这些数据录入的时候,指定索引库使用的分词器,本地使用的是 IK 分词器,前提是已经安装好并且没有报错

        2.2.1 创建索引库,指定分词器

        创建索引库的时候,指定该索引库的设置,这里指定的是第一种分词模式

IK 分词器有两种分词颗粒度

  • ik_max_word 对应着 IK 分词器的细粒度模式,它会尽可能地将文本切分成最小的词语单元。
  • ik_smart 对应着 IK 分词器的搜索引擎模式,它会根据文本的内容和上下文进行智能分词,提高搜索结果的相关性和效率。
PUT /juejin_index
{"settings": {"analysis": {"analyzer": {"my_ik_analyzer": {"tokenizer": "ik_max_word"}}}},"mappings": {"properties": {"content": {"type": "text","analyzer": "my_ik_analyzer"}}}
}

        2.2.2 数据录入

         采用批量插入的方式,在最后两个数据中加入了两个扰乱字符串,如下:

POST /_bulk
{"index":{"_index":"juejin_index"}}
{"name":"可视化方案 前端"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化编辑器"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化拖拽软件"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化表单设计"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化大屏前端"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化工作流引擎"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化大屏屏幕适配"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化数学软件"}
{"index":{"_index":"juejin_index"}}
{"name":"可视化大屏特效"}
{"index":{"_index":"juejin_index"}}
{"name":"123可视化"}
{"index":{"_index":"juejin_index"}}
{"name":"可以视为化学武器"}

        2.2.3 查询测试

        查询,”可视化“,相应的会有哪些提示,排名前三如下,排序是根据每个词条的匹配分数值从大到小排列,比如:

”123可视化“  有 14.6% 的把握

”可视化大屏“ 有 13.2% 的把握

”可视化编辑器“ 有 12.3% 的把握

GET /juejin_index/_search
{"query": {"match": {"name": "可视化"}}
}

 

  1. took: 查询执行的时间,以毫秒为单位。
  2. timed_out: 表示查询是否超时。
  3. _shards: 关于索引分片的信息,包括总分片数、成功分片数、跳过的分片数和失败的分片数。
    • total: 总分片数。
    • successful: 成功的分片数。
    • skipped: 被跳过的分片数。
    • failed: 失败的分片数。
  4. hits: 匹配的文档信息。
    • total: 匹配的文档总数。
      • value: 匹配的文档数。
      • relation: 与匹配文档数相关的关系,例如 "eq" 表示相等。
    • max_score: 匹配文档中最高的分数。
    • hits: 实际匹配的文档数组,每个文档包含以下信息:
      • _index: 文档所属的索引。
      • _type: 文档类型,在此处为 "_doc"。
      • _id: 文档的唯一标识符。
      • _score: 文档匹配得分,表示与查询条件的相关性。
      • _source: 包含文档原始内容的字段,以及其他自定义字段(如果有)。在这个例子中,"name" 是一个自定义字段,包含了文档的名称信息。
        2.3 查询的流程

        数据从录入到查询的过程都有哪些

        2.3.1 分词录入,这里使用的 IK 分词器,首先会对字符串拆分,如下:

        ”可视化大屏“ 这个字符串可以拆分为 这几个词条:{”可视化“,”可视“,”化“,”大“,”屏“},然后记录每个词条对应的文档 id,剩余的字符串也都是如此。

         2.3.2 用户输入词汇拆分,IK 分词器会将”可视化“拆分为如下:

          ”可视化“会拆分为如下词条:{”可视化“,”可视“,”化“},然后根据这些词条到词条列表中查询对应的文档id

        2.4 整个查询流程图

        从用户输入”可视化“开始,流程大概如下:

 🍹章末

        文章到这里就结束了~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C++ QT项目实战]----C++ QT系统实现多线程通信

前言 在C QT中&#xff0c;多线程通信原理主要涉及到信号与槽机制和事件循环机制。 1、信号与槽机制&#xff1a; 在QT中&#xff0c;信号与槽是一种用于对象间通信的机制。对象可以通过发送信号来通知其他对象&#xff0c;其他对象通过连接槽来接收信号并进行相应的处…

微信小程序:12.页面导航

什么是页面导航 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现的页面导航的方式有两种&#xff1a; 连接location.href 小程序中实现页面导航的两种方式 声明式导航 在页面上声明一个导航组件 通过点击组件实现页面跳转 导航TabBar页面 是指配置TabB…

mac 教程 终端如何拆墙

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

C语言:一维数组、二维数组、字符数组介绍

数组 介绍一维数组定义应用方法初始化 举例示例结果 二维数组定义应用方法初始化 举例示例结果 字符数组定义应用方法初始化 举例示例结果分析 介绍 在C语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储一系列相同类型的数据。数组可以是多维的&#xff0c;最…

Android --- 网络请求

通常在 Android 中进行网络连接一般使用 Scoket 和HTTP&#xff0c;HTTP 请求方式比 Scoket 多。HTTP 请求一般采用原生的 HttpClient 和 HttpUrlConnection 的两种网络访问方式&#xff08;系统自带的&#xff09;。但是在 Android 5.0 的时候 Google 就不推荐使用 HttpClient…

Bytebase 2.16.0 - 支持 Oracle 和 SQL Server DML 变更的事前备份

&#x1f680; 新功能 支持 Oracle 和 SQL Server DML 变更的事前备份。 支持在 SQL 编辑器中显示存储过程和函数。 支持兼容 TDSQL 的 MySQL 和 PostgreSQL 版本。 支持把数据库密码存储在 AWS Secrets Manager 和 GCP Secret Manager。 支持通过 IAM 连接到 Google Clou…

Java | Leetcode Java题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; class Solution {public int totalNQueens(int n) {Set<Integer> columns new HashSet<Integer>();Set<Integer> diagonals1 new HashSet<Integer>();Set<Integer> diagonals2 new HashSet<Integer>…

ArcGIS小技巧—一文带你理清个人地理数据库和文件地理数据库

不知各位GISer在使用Arcgis软件时是否会遇到这样一个问题&#xff0c;在新建一个地理数据库来存放要素数据集时会有文件地理数据库和个人地理数据库两种&#xff0c;那么&#xff0c;这两种地理数据库有何区别呢&#xff1f; 首先&#xff0c;我们先来看看地理数据库的定义&…

Thread方法具体解析

对于run方法 如果该线程是使用单独的 Runnable run 对象构造的&#xff0c;则调用该 Runnable 对象的 run 方法&#xff1b;否则&#xff0c;此方法不执行任何操作并返回。 对于start方法 导致该线程开始执行&#xff1b; Java虚拟机调用该线程的run方法。 这里介绍一个快捷键…

【OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…

c++map类operator[]详解

定义 让我们来看一下标准库里对该函数的定义. map::operator[] - C Reference (cplusplus.com) 参数是一个key_val类型的值,返回值是对应key 的value值,如果key不存在的话,value会调用其默认构造函数来初始化. 使用 举个例子 int main() {map<string, string> dict{ {…

基于springboot的高校宣讲会管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…