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://xiahunao.cn/news/3269747.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode Hot100 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…

本地化部署Chatglm和防踩坑攻略

最近想搞点什么东西练练手,传统crud又没有意义,于是就看到了给介绍AI的文章,然后就慢慢自己摸索,从0到1,独自部署应用。 项目简介 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是…

CVPR`24 | 4D编辑哪家强?浙大首次提出通用指导4D编辑框架:Instruct 4D-to-4D

文章链接:https://arxiv.org/pdf/2406.09402 项目地址:https://immortalco.github.io/Instruct-4D-to-4D/ 今天和大家一起学习的是Instruct 4D-to-4D,可以通过2D扩散模型实现4D感知和时空一致性,以生成高质量的指令引导的动态场景…

selenium----CSS表达式选择元素

前面我们学习了根据 id、class属性、tag名 选择元素。 如果我们要选择的 元素 没有id、class 属性,或者有些我们不想选择的元素 也有相同的 id、class属性值,怎么办呢?这时候我们通常可以通过 CSS selector 语法选择元素。 选择元素 通过 …

22.jdk源码阅读之Thread(上)

1. 写在前面 Java 中的 Thread 类是多线程编程的基础,也是我们日常工作中用的比较多的类,但是你真的了解它吗?下面这几个问题你是否有思考过? start() 和 run() 方法有什么区别?什么是线程的生命周期?什么…

邮件攻击案例系列三:动态 IP 池爆破员工邮箱钓鱼重要客户

案例描述 2023 年 11 月,某制造业企业员工 Emily 接到海外客户电话,向其核实一封电子邮件的真实性,因为客户认为,该邮件所给出的链接不像是该公司的官网网址。Emily 查看自己的邮箱,并未发现客户所说的邮件。但从客户…

RPA:如何一次回答多个问题

洞悉技术的本质,享受科技的乐趣 先完成10%目标,迈出100%之一行动 2分钟的努力也有价值 从每天解决1个小问题开始。 本文介绍如何使用playwright来处理新页面 三句话说清楚问题 一天回答一个问题太慢了,我想一天回答 3个问题 了解基本原理 新页…

YOLOv5改进 | 卷积模块 | 即插即用的递归门控卷积gnConv

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录: 《YOLOv5入门 改…

概率模拟(sigmoid、softmax)

概率模拟(sigmoid、softmax) 1. sigmoid1.1 sigmoid 定义1.2 sigmoid 主要特性1.3 sigmoid 的缺点1.4 代码画 sigmoid 函数图像 2. softmax2.1 softmax 定义与原理2.2 softmax 特点与优势2.3 softmax 应用场景2.4 softmax 实现方式2.5 softmax 注意事项2…

C++从入门到起飞之——友元内部类匿名对象 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1、友元 2、内部类 3. 匿名对象 4、完结散花 1、友元 • 友元提供了⼀种突破类访问限定符封装的…

在 Jetpack Compose 中使用 CameraX示例

在使用Jetpack Compose开发安卓应用,当在学习使用CameraX组件时发现官方提供的教程不是Compose的。教程地址如下: https://developer.android.com/codelabs/camerax-getting-started?hlzh-cn#1 与是我就记录一下,简单的示例。 内容参考&…

吴恩达的TranslationAgent学习

TranslationAgent构成 整个[TranslationAgent (github.com)]在流程上分为短文本的一次性翻译和长文本的分chunk翻译(按照Token进行划分)。 但是不论长文本翻译还是短文本翻译,总体流程遵循执行、纠正再执行的逻辑循环实现。 这种按照自省思路…

基于JSP的电子商城系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:JSPJavaB/S架构 工具:Eclipse、Tomcat 系统展示 首页 管理员功能界面 用户功能界面 医…

Kylin 入门教程

Apache Kylin 是一个开源的分布式数据仓库和 OLAP(在线分析处理)引擎,旨在提供亚秒级查询响应时间,即使在处理超大规模数据集时也是如此。Kylin 可以有效地将原始数据预计算为多维数据立方体(Cube),并利用这些预计算结果来提供快速查询。本文将带你从基础知识到操作实践…

项目管理工具-Maven-创建一个mavenweb项目

文章目录 IDEA开发maven项目依赖范围 IDEA开发maven项目 点击NewProject,填写项目名字Name为javaWeb-maven,填写项目的存储地址,选择Archetype为org.apache.maven.archetypes:maven-archetype-webapp,然后再点击Create&#xff0…

Android WebViewClient 的 `shouldOverrideUrlLoading` 方法

简介 在Android开发中,WebView是一个强大的工具,可以在你的应用中显示网页内容。了解 WebViewClient 中的 shouldOverrideUrlLoading 方法是至关重要的,因为这个方法允许你控制 URL 在 WebView 中的处理方式。 在本文中,我们将详…

基于FFmpeg和SDL的音视频解码播放的实现过程与相关细节

目录 1、视频播放器原理 2、FFMPEG解码 2.1 FFMPEG库 2.2、数据类型 2.3、解码 2.3.1、接口函数 2.3.2、解码流程 3、SDL播放 3.1、接口函数 3.2、视频播放 3.3、音频播放 4、音视频的同步 4.1、获取音频的播放时间戳 4.2、获取当前视频帧时间戳 4.3、获取视…

OZON打开哈萨克斯坦市场,OZON测试开通哈萨克斯坦市场中国产品

在全球化日益深入的今天,跨境电商成为了连接不同国家和地区消费者的重要桥梁。2024年7月26日,Ozon Global宣布了一项重大扩展计划,正式将中国卖家的销售版图拓展至哈萨克斯坦市场,为中国企业打开了新的增长机遇之门。 OZON哈萨克斯…

实现共模噪声电流相互抵消的方法

共模传导路径中噪声电流相互抵消,从而使总的共模电流减小, 终达到降噪的目的。目前为实现共模噪声电流相互抵消,主要是采用动点电容抵消法。 动点电容抵消法原理 动点电容抵消法就是选取合适的动点,添加原副边跨接电容&#xff0c…

【Leetcode】二十、记忆化搜索:零钱兑换

文章目录 1、记忆化搜索2、leetcode509:斐波那契数列3、leetcode322:零钱兑换 1、记忆化搜索 也叫备忘录,即把已经计算过的结果存下来,下次再遇到,就直接取,不用重新计算。目的是以减少重复计算。 以前面提…