ElasticSearch搜索

ES搜索

elastic search

一套搜索引擎技术,主要技术栈包括

  • Elasticsearch:用于数据存储、计算和搜索

  • Kibana:用于数据可视化

在数据库模糊查询中,因为不走索引,所以效率很低,而在搜索引擎中,不仅效率高,而且即使出现个别错字,或者用拼音搜索,甚至用同义词搜索都能正确匹配数据

ES的docker安装(默认端口9200)

docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network hm-net \-p 9200:9200 \-p 9300:9300 \elasticsearch:7.12.1

Kibana的docker安装(默认端口5601)

es的可视化控制台

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=hm-net \
-p 5601:5601  \
kibana:7.12.1

倒排索引

先了解两个概念

文档(document):即数据库中的行,每个文档代表一条数据
词条(term):对数据分词得到的词就是词条
创建倒排索引:

将每一个文档的数据利用分词算法做拆分,得到多个词条

创建表,表中每行数据包含词条,词条所在的文档id,位置等信息

因为词条是唯一的,所以词条可以作为数据库的索引

请添加图片描述

根据倒排索引做查询:

先对搜索条件进行分词得到词条

根据词条进行查询,得到文档id

最终结果集就是这些文档id对应的文档

词条和文档id都是对应表中的索引,查询效率很高

ES概念

文档:ES所面向存储的数据,会被序列化为json数据在es中存储
{"id": 1,"title": "小米手机","price": 3499
}
{"id": 2,"title": "华为手机","price": 4999
}
{"id": 3,"title": "华为小米充电器","price": 49
}
{"id": 4,"title": "小米手环","price": 299
}
索引:将类型相同的文档集中在一起管理,称为索引(index),类似数据库中的表
映射:类似数据库中表的字段约束,用以定义表的结构和字段的名称和类型等信息
字段:即每个索引中的文档的字段(属性),和数据库中的字段(列)一致

MySQL和ES

一般在安全性要求较高的操作中使用mysql实现

在查询性能要求较高的搜索中,使用ES实现

再通过例如canal+mq的方式实现数据同步,保证一致性

IK分词器

一个高效,精准的中文分词算法分词器

docker安装
docker exec -it es ./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

分词模式

包含两种模式

ik_smart:智能语义切分(粗粒度)
ik_max_word:最细粒度切分(细粒度)
可以通过在配置文件IkAnalyzer.cfg.xml中添加扩展词典实现自定义分词

ES索引库操作

Mapping映射属性

Mapping是对索引库中文档的约束,常见的Mapping属性包括:

  • type:字段数据类型,常见的简单类型有:
    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
    • 数值:longintegershortbytedoublefloat
    • 布尔:boolean
    • 日期:date
    • 对象:object
  • index:是否创建索引,默认为true
  • analyzer:使用哪种分词器
  • properties:该字段的子字段

索引库的操作

采用Restful风格的API,请求参数采用json风格

创建索引库和映射
  • 请求方式:PUT
  • 请求路径:/索引库名,可以自定义
  • 请求参数:mapping映射
PUT /索引库名称
{"mappings": {"properties": {"字段名":{"type": "text","analyzer": "ik_smart"},"字段名2":{"type": "keyword","index": "false"},"字段名3":{"properties": {"子字段": {"type": "keyword"}}},// ...略}}
}
查询索引库
  • 请求方式:GET
  • 请求路径:/索引库名
  • 请求参数:无
GET /索引库名
修改索引库

索引库不能修改映射,因为一旦修改映射就会影响倒排索引

但是可以添加新字段到索引库中

PUT /索引库名/_mapping
{"properties": {"新字段名":{"type": "integer"}}
}
删除索引库
  • 请求方式:DELETE
  • 请求路径:/索引库名
  • 请求参数:无
DELETE /索引库名

文档操作

新增文档

post /索引库名/_doc/文档id

POST /索引库名/_doc/文档id
{"字段1": "值1","字段2": "值2","字段3": {"子属性1": "值3","子属性2": "值4"},
}
查询文档

get /索引库名称/_doc/条件

GET /{索引库名称}/_doc/{id}
删除文档

delete /索引库名/_doc/文档id

DELETE /{索引库名}/_doc/id值
修改文档

分为全量修改和局部修改

全量修改:覆盖原来的文档(删除原来的文档)

局部修改:修改文档中的部分字段

全量修改

put /索引库名/_doc/文档id

PUT /{索引库名}/_doc/文档id
{"字段1": "值1","字段2": "值2",// ... 略
}
局部修改

post /索引库名/_update/文档id

POST /{索引库名}/_update/文档id
{"doc": {"字段名": "新的值",}
}

批处理

POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }//新增文档
{ "field1" : "value1" }//新增文档内容
{ "delete" : { "_index" : "test", "_id" : "2" } }//删除文档
{ "create" : { "_index" : "test", "_id" : "3" } }//创建文档
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }//更新文档
{ "doc" : {"field2" : "value2"} }

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

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

相关文章

docker安装sql server容器

安装 docker pull mcr.microsoft.com/mssql/server:2017-latest启动 docker run -e "ACCEPT_EULAY" -e "SA_PASSWORDwjl135246" -p 1433:1433 -m 4000M --memory 4000M --name sqlserver -d mcr.microsoft.com/mssql/server:2017-latest远程链接即可 参…

用户登录安全是如何保证的?如何保证用户账号、密码安全?

1.HTTP协议直接传输密码(无加密) 前端 直接发送HTTP请求(无加密),攻击者可直接捕获网络包,看到下面的明文信息 因此,使用HTTP协议传输会直接暴露用户敏感信息。 2.HTTPS协议直接传输密码&…

Postgresql 16开启SELINUX

平时我们习惯了,安装数据库,就关闭SELINUX,不关闭SELINUX,就不会安装数据库了,那么不关闭SELINUX,就不能安装数据库了吗? 答案是否定的。 不过,如果我们在开启SELINUX情况下安装PG…

Matlab类阿克曼车机器人运动学演示

v1是后驱动轮轮速, v2是转向角变化速度, 实际上我们只需要关注XQ, YQ和Phi的变化率。 通过这三项和时间步长, 我们就可以计算出变化量, 再结合初始值就能推断出每个时刻的值。 % 清理当前运行环境 % 清除所有变量 cle…

opencv使用KCF算法跟踪目标,给出目标中心位置

效果图 代码 import cv2class VideoTracker:def __init__(self, video_path: str):self.video_path video_pathself.cap cv2.VideoCapture(video_path)self.tracker cv2.legacy.TrackerKCF_create()self.initBB Noneself.tracker_initialized Falseself.selecting Fals…

【教程】vscode添加powershell7终端

win10自带的 powershell 是1.0版本的,太老了,更换为powershell7后,在 vscode 的集成终端中没有显示本篇教程记录在vscode添加powershell7终端的过程 打开vscode终端配置 然后来到这个页面进行设置 查看 powershell7 的安装位置&#xff…

韦东山嵌入式linux系列-异常与中断的概念及处理流程

1 中断的引入 一些概念: 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运…

数据结构第二讲:顺序表

数据结构第二讲:顺序表 1.线性表2.什么是顺序表3. 静态顺序表4.动态顺序表4.1顺序表基础4.2顺序表的初始化4.3顺序表的销毁4.4顺序表的尾插4.5顺序表的头插4.6顺序表的尾删4.7顺序表的头删4.8顺序表在指定位置之前插入数据4.9顺序表删除指定位置的数据4.10顺序表查找…

JNPF全新V5.0版本!重磅升级——全局优化篇

尊敬的JNPF用户们: 我们非常高兴地宣布,经过团队数月的辛勤努力和不断的技术创新,JNPF快速开发平台终于迎来了里程碑式的全新升级——V5.0版本!这一版本的更新发布,不仅代表着我们技术实力的进一步提升,是…

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络(Deep Neural Network, DNN)是一种复杂的机器学习模型,其特点在于包含多个隐藏层,从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍: 一、基本概念 深度…

el-table列的显示与隐藏

需求:实现 表字段的显示与隐藏。效果图 代码实现 写在前面 首先 我部分字段有自定义的排序逻辑,和默认值或者 数据的计算 所以是不能简单的使用 v-for 循环column 。然后 我需要默认展示一部分字段,并且 当表无数据时 提示不能 显示隐藏 …

Flink-CDC解析(第47天)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1. CDC 概述1.1 什么是CDC?1.2 CDC的实现机制1) 基于主动查询的 CDC:2) 基于事件接收CDC: 前言 本文主要概述了Flink-CDC. …

人工智能驱动的光学检测技术可阻止假冒芯片

欢迎关注GZH《光场视觉》 在过去的60年里,半导体行业已经蓬勃发展,成为了一个价值5000亿美元的全球市场。然而,这个行业正面临着两大挑战:新芯片的严重短缺和假冒芯片的激增。这两个问题不仅带来了巨大的故障风险,还导…

idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.

解决方案 1.打开Edit Configurations,进去编辑,如下: 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可

RK3588+MIPI+GMSL+AI摄像机:自动车载4/8通道GMSL采集/边缘计算盒解决方案

RK3588作为目前市面能买到的最强国产SOC,有强大的硬件配置。在智能汽车飞速发展,对图像数据矿场要求越来越多的环境下,如何高效采集数据,或者运行AI应用,成为刚需。 推出的4/8通道GMSL采集/边缘计算盒产品满足这些需求…

leetcode日记(51)不同路径Ⅱ

和上一道题(无障碍物的最短路径)很像,但事实上比上一题多了优化方法 根据上一题改的代码如下,添加了对障碍物的判定,如果有障碍物则将数组值设为0。 class Solution { public:int uniquePathsWithObstacles(vector&l…

【PyCharm】PyCharm 2024.1 的最新变化-代码补全与智能提示

目录 代码补全与智能提示 更智能的代码补全功能 基于机器学习的代码建议 上下文相关的代码片段推荐 全行代码补全支持 (JavaScript 和 TypeScript) 本地 ML 模型的全行补全 示例 示例 1: 基于上下文的代码建议 示例 2: 全行代码补全 详细对比示例 示例 3: 传统代码补…

[Vulnhub] Raven2 PHPMailer-RCE+MSQP:Mysql权限提升

信息收集 IP AddressOpening Ports192.168.101.160TCP:22,80,111,46606 $ nmap -p- 192.168.101.160 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f…

数据结构 链式存储 +

int DeleteLinkList(LinkList *list, char *name); int ReviseLinkList(LinkList *list, char *name, DATATYPE data); int DestroyLinkList(LinkList *list); int InsertTailLinkList(LinkList *list, DATATYPE data); ​​​​​​​删除 修改​​​​​​​ 销毁 ​​​​​…

Anaconda +Pytorch安装教程

Anaconda Pytorch安装教程 Anaconda安装 小土堆的安装教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili Free Download | Anaconda 这里自己选一个文件夹安装即可 第一个红框表示添加图标到开始菜…