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

elasticsearch 和 RediSerch

elasticsearch 和 RediSerch

前情提要

学习文章来自Docker 安装 ElasticSearch - 知乎 (zhihu.com)

docker 安装

docker pull docker.io/elasticsearch:7.1.1

image-20240521091715472

启动!

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" b0e9f9f047e6
-d:后台启动
--name:容器名称
-p:端口映射
-e:设置环境变量
discovery.type=single-node:单机运行
b0e9f9f047e6:镜像id
如果启动不了,可以加大内存设置:-e ES_JAVA_OPTS="-Xms512m -Xmx512m"

检查如何启动成功,访问9200端口即可

image-20240521091829028

安装 ik 分词器

先查看号然后进入到里面

docker ps

image-20240521091908291

docker exec -it es bash

image-20240521092004051

进去之后输入

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.1/elasticsearch-analysis-ik-7.1.1.zip

安装完毕退出即可

测试访问端口9200下_analyze

localhost:9200/_analyze

image-20240521092045320

分词结果

ES可视化工具

docker pull mobz/elasticsearch-head:5

拉下来之后启动images

前提

需要在之前的es容器中设置跨域设置

docker exec -it es /bin/bash

编辑文件

vi config/elasticsearch.yml

加入这两行信息

http.cors.enabled: true 
http.cors.allow-origin: "*"

image-20240521093454783

然后到界面localhost:9100进行连接

image-20240521093602565

使用(初步整合SpringBoot3.XX rest客户端方式整合)

1. 依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.2.0</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.2.0</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.2.0</version></dependency><!--加入lombook--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

2. 配置文件

elasticsearch:uris: http://127.0.0.1:9200username:password:

3. config

package org.hj.elasticsearchstudy.elasticsearchstudy.config;import lombok.SneakyThrows;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;import javax.net.ssl.SSLContext;
import java.util.ArrayList;
import java.util.List;@Configurationpublic class EsConfig {@Value("${elasticsearch.uris}")private String uris;@Value("${elasticsearch.username}")private String username;@Value("${elasticsearch.password}")private String password;@Bean(name = "restHighLevelClient")public RestHighLevelClient restHighLevelClient() {// 拆分地址List<HttpHost> hostLists = new ArrayList<>();String[] hostList = uris.split(",");for (String addr : hostList) {hostLists.add(HttpHost.create(addr));}// 转换成 HttpHost 数组HttpHost[] httpHost = hostLists.toArray(new HttpHost[] {});RestClientBuilder clientBuilder = RestClient.builder(httpHost);clientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {@SneakyThrows@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {CredentialsProvider credentialsProvider = new BasicCredentialsProvider();UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password);credentialsProvider.setCredentials(AuthScope.ANY, credentials);httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);}IOReactorConfig ioReactorConfig = IOReactorConfig.custom().setIoThreadCount(100).setConnectTimeout(10000).setSoTimeout(10000).build();httpClientBuilder.setDefaultIOReactorConfig(ioReactorConfig);SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {@Overridepublic boolean isTrusted(java.security.cert.X509Certificate[] arg0, String arg1) {return true;}}).build();httpClientBuilder.setSSLContext(sslContext);httpClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);return httpClientBuilder;}});return new RestHighLevelClient(clientBuilder);}}

测试查询

@Test
public void testMatchAll() throws IOException {//1.创建 SearchRequest搜索请求SearchRequest searchRequest = new SearchRequest();searchRequest.indices("book");//指定要查询的索引//2.创建 SearchSourceBuilder条件构造。builder模式这里就先不简写了SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();searchSourceBuilder.query(matchAllQueryBuilder.queryName("Java"));//3.将 SearchSourceBuilder 添加到 SearchRequest中searchRequest.source(searchSourceBuilder);//4.执行查询SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);//5.解析查询结果System.out.println(searchResponse);System.out.println("花费的时长:" + searchResponse.getTook());SearchHits hits = searchResponse.getHits();System.out.println(hits.getTotalHits());System.out.println("符合条件的总文档数量:" + hits.getTotalHits().value);hits.forEach(p -> System.out.println("文档原生信息:" + p.getSourceAsString()));
}

image-20240522111118904

RediSearch

学习来源

[32 实战:RediSearch 高性能的全文搜索引擎 (lianglianglee.com)](https://learn.lianglianglee.com/专栏/Redis 核心原理与实战/32 实战:RediSearch 高性能的全文搜索引擎.md)

安装

docker run -p 6379:6379 redislabs/redisearch:latest

进入

安装完成之后使用 redis-cli 来检查 RediSearch 模块是否加载成功,使用 Docker 启动 redis-cli,命令如下:

docker exec -it myredis redis-cli

其中“myredis”为 Redis 服务器的名称,执行结果如下:

127.0.0.1:6379> module list
1) 1) "name"2) "ft"3) "ver"4) (integer) 10610

返回数组存在“ft”,表明 RediSearch 模块已经成功加载。

源码方式安装

如果不想使用 Docker,我们也可以使用源码的方式进行安装,安装命令如下:

git clone https://github.com/RedisLabsModules/RediSearch.git
cd RediSearch # 进入模块目录
make all

安装完成之后,可以使用如下命令启动 Redis 并加载 RediSearch 模块,命令如下:

src/redis-server redis.conf --loadmodule ../RediSearch/src/redisearch.so

使用

我们先使用 redis-cli 来对 RediSearch 进行相关的操作。

创建索引和字段
127.0.0.1:6379> ft.create myidx schema title text weight 5.0 desc text
OK

其中“myidx”为索引的ID,此索引包含了两个字段“title”和“desc”,“weight”为权重,默认值为 1.0。

将内容添加到索引
127.0.0.1:6379> ft.add myidx doc1 1.0 fields title "He urged her to study English" desc "good idea"
OK

其中“doc1”为文档 ID(docid),“1.0”为评分(score)。

根据关键查询
127.0.0.1:6379> ft.search myidx "english" limit 0 10
1) (integer) 1
2) "doc1"
3) 1) "title"2) "He urged her to study English"3) "desc"4) "good idea"

可以看出我们使用 title 字段中的关键字“english”查询出了一条满足查询条件的数据。

中文搜索

首先我们需要先给索引中,添加一条中文数据,执行命令如下:

127.0.0.1:6379> ft.add myidx doc2 1.0 language "chinese" fields title "Java 14 发布了!新功能速览" desc "Java 14 在 2020.3.17 日发布正式版了,但现在很多公司还在使用 Java 7 或 Java 8"
OK

注意:这里必须要设置语言编码为中文,也就是“language “chinese””,默认是英文编码,如果不设置则无法支持中文查询(无法查出结果)。

我们使用之前的查询方式,命令如下:

127.0.0.1:6379> ft.search myidx "正式版"
1) (integer) 0

我们发现并没有查到任何信息,这是因为我们没有指定搜索的语言,不但保存时候要指定编码,查询时也需要指定,查询命令如下:

127.0.0.1:6379> ft.search myidx "发布了" language "chinese"
1) (integer) 1
2) "doc2"
3) 1) "desc"2) "Java 14 \xe5\x9c\xa8 2020.3.17 \xe6\x97\xa5\xe5\x8f\x91\xe5\xb8\x83\xe6\xad\xa3\xe5\xbc\x8f\xe7\x89\x88\xe4\xba\x86\xef\xbc\x8c\xe4\xbd\x86\xe7\x8e\xb0\xe5\x9c\xa8\xe5\xbe\x88\xe5\xa4\x9a\xe5\x85\xac\xe5\x8f\xb8\xe8\xbf\x98\xe5\x9c\xa8\xe4\xbd\xbf\xe7\x94\xa8 Java 7 \xe6\x88\x96 Java 8"3) "title"4) "Java 14 \xe5\x8f\x91\xe5\xb8\x83\xe4\xba\x86\xef\xbc\x81\xe6\x96\xb0\xe5\x8a\x9f\xe8\x83\xbd\xe9\x80\x9f\xe8\xa7\x88"

从结果可以看出中文信息已经被顺利的查询出来了。

删除索引的数据
127.0.0.1:6379> ft.del myidx doc1
(integer) 1

我们使用索引加文档 ID 就可以实现删除数据的功能。

删除索引

我们可以使用“ft.drop”关键字删除整个索引,执行命令如下:

127.0.0.1:6379> ft.drop myidx
OK
查询索引详细信息

我们可以使用“ft.info”关键查询索引相关信息,执行命令如下:

127.0.0.1:6379> ft.info myidx1) index_name2) myidx3) index_options4) (empty list or set)5) fields6) 1) 1) title2) type3) TEXT4) WEIGHT5) "5"2) 1) desc2) type3) TEXT4) WEIGHT5) "1"7) num_docs8) "2"9) max_doc_id
10) "2"
11) num_terms
12) "9"
13) num_records
14) "18"
15) inverted_sz_mb
16) "0.000102996826171875"
17) total_inverted_index_blocks
18) "29"
19) offset_vectors_sz_mb
20) "1.71661376953125e-05"
21) doc_table_size_mb
22) "0.000164031982421875"
23) sortable_values_size_mb
24) "0"
25) key_table_size_mb
26) "8.0108642578125e-05"
27) records_per_doc_avg
28) "9"
29) bytes_per_record_avg
30) "6"
31) offsets_per_term_avg
32) "1"
33) offset_bits_per_record_avg
34) "8"
35) gc_stats
36)  1) bytes_collected2) "0"3) total_ms_run4) "16"5) total_cycles6) "14"7) avarage_cycle_time_ms8) "1.1428571428571428"9) last_run_time_ms10) "2"11) gc_numeric_trees_missed12) "0"13) gc_blocks_denied14) "0"
37) cursor_stats
38) 1) global_idle2) (integer) 03) global_total4) (integer) 05) index_capacity6) (integer) 1287) index_total8) (integer) 0

其中“num_docs”表示存储的数据数量。

整合

暂时还没整合后续更新ing

相关文章:

elasticsearch 和 RediSerch

elasticsearch 和 RediSerch 前情提要 学习文章来自Docker 安装 ElasticSearch - 知乎 (zhihu.com) docker 安装 docker pull docker.io/elasticsearch:7.1.1启动! docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" b0e9f9f0…...

删除MySQL中所有表的外键

方法一&#xff1a; 原理 查询schema中所有外键名称然后拼接生成删除语句 第一步&#xff1a; SELECT CONCAT(ALTER TABLE ,TABLE_SCHEMA,.,TABLE_NAME, DROP FOREIGN KEY ,CONSTRAINT_NAME, ;) FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA数据库名…...

webstorm新建vue项目相关问题

前言 这个迭代后端需求偏少&#xff0c;前端code的键盘都起火星子了。来了4个外包支持&#xff0c;1个后端3个前端&#xff0c;还是不够用啊。刚好趁这个机会稍微学习下vue&#xff0c;其实之前环境也配置过了&#xff0c;所以这里就不分享环境配置了&#xff0c;主要分享下新建…...

2024年高考考务人员网上培训参考答案

第1部分&#xff1a;单选题 1. 关于试卷保密室负责人职责&#xff0c;以下说法不正确的是&#xff08;B&#xff09; [2分] A. 负责试卷的接收、保管和发放工作 B. 试卷保密室内屋门锁钥匙和铁柜门锁钥匙必须由同一人保管 C. 试卷接收和发放应当当面清点试卷袋数量&#…...

JavaEE之线程(9) _定时器的实现代码

前言 定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”。 达到一个设定的时间之后&#xff0c;就执行某个指定好的代码&#xff0c;比如&#xff1a; 在受上述场景中&#xff0c;当客户端发出去请求之后&#xff0c; 就要等待响应&#xff0c;如果服务器迟迟没有响应&…...

纯前端实现将页面数据下载word文档中【包括图片,echarts图,表格,和对话 内容】

亲测真实有效 导出word步骤 在Vue中导出Word文档&#xff0c;可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库&#xff1a; npm install file-saver html-docx-js --save "html-docx-js": "0.3.1","file-saver": "2.0.5…...

JavaSE——类和对象(二)~~封装

目录 一.封装 二.封装扩展之包 三.static成员 四. 代码块 五. 内部类&#xff08;重要&#xff09; 大家好呀&#xff0c;我是北纬&#xff0c;接着上节我们继续讲解Java中关于类和对象的相关知识&#xff0c;今天着重给大家介绍一下关于面向对象程序的特性之一——封装。…...

头歌OpenGauss数据库-I.复杂查询第9关:交换性别

任务描述 本关任务&#xff1a;给定一张 tb_Salary 表&#xff0c;如下所示&#xff0c;有 m 男性 和 f 女性的值。交换所有的 f 和 m 值&#xff08;例如&#xff0c;将所有 f 值更改为 m&#xff0c;反之亦然&#xff09;。 idnamesexsalary1Elonf70002Donnyf80003Careym60…...

冷干机使用中的注意事项

冷干机使用中的注意事项 使用冷干机时&#xff0c;以下是几个注意事项&#xff1a; 安装位置&#xff1a;选择一个通风良好、温度适宜的位置安装冷干机。确保周围环境没有过多的灰尘、腐蚀性气体或其他污染物&#xff0c;以免对冷干机的正常运行和寿命产生不利影响。 电源要求…...

OpenFeign微服务调用组件使用

前言&#xff1a;OpenFeign是可以跨服务、跨进程的调用方式。 什么是Feign Feign是Netflix开发的声明式、模版化的HTTP客户端。 优势: Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验&#xff0c;开发者完全感知不到这是远程方法&#xff0c;更感知不到这…...

文心智能体,零代码构建情感表达大师智能体

前言 随着智能体技术的突飞猛进&#xff0c;各行各业正迎来前所未有的变革与机遇。智能体&#xff0c;作为人工智能领域的重要分支&#xff0c;以其自主性、智能性和适应性&#xff0c;正逐步渗透到我们生活的每一个角落&#xff0c;成为推动社会进步和科技发展的新动力。 为了…...

es6

# 一、变量提升性 let和const没有变量提升性 console.log(str) 》undefined var str 你好console.log(num) 报错 let num 你好console.log(a) 报错 const a 你好function demo (){ let n 2; if(true){ let n 1; } console.log(n) //2 const 也是一样 var 是1 } demo()const…...

「贪心算法」柠檬水找零

力扣原题链接&#xff0c;点击跳转。 假设你的手里没有钱。你要卖柠檬水&#xff0c;每杯5块钱。每个顾客有可能会给你5块钱、10块钱或20块钱&#xff0c;你要拿手中的钱找零。如何判断你能否成功找零呢&#xff1f; 如果一上来就有顾客花10块钱或20块钱&#xff0c;你手中没…...

ssm139选课排课系统的设计与开发+vue

选课排课系统的设计与开发vue 摘 要 互联网的普及&#xff0c;改变了人们正常的生活学习及消费习惯&#xff0c;而且也大大的节省了人们的时间&#xff0c;由于各种管理系统都再不断的增加&#xff0c;更方便了用户&#xff0c;也改良了很多的用户习惯。对于选课排课系统查询…...

Python使用virtualenv创建虚拟环境

目录 第一步&#xff1a;安装virtualenv 第二步&#xff1a;选择一个文件夹用来放所创建的虚拟环境 第三步&#xff1a;创建虚拟环境 第四步&#xff1a;激活虚拟环境 第五步&#xff1a;退出虚拟环境 第六步&#xff1a;测试安装django 前提&#xff1a;你得有个python环…...

LuatOS-Air二次开发学习

LuatOS简介 在介绍LuatOS-Air之前&#xff0c;先介绍下LuatOS。 LuatOS是合宙自研的嵌入式操作系统。覆盖各类物联网应用场景&#xff0c;可运行于4G Cat.1/MCU/NB-IoT/2G/Wi-Fi/蓝牙等等不同的物联网主控芯片。通过完善的嵌入式操作系统LuatOS&#xff0c;使得物联网主控CPU更…...

【Linux】关于获取进程退出状态中的core dump标志补充

通过 wait/waitpid 可以获取子进程的退出状态, 从而判断其退出结果. 记录退出状态的 int 变量 status 的使用情况如下图所示: 如果是收到信号终止的话, 低 7 位为收到的终止信号, 而低第 8 位为 core dump 标志, core dump 标志有什么用呢? core dump 标志只存 0/1, 表示是否…...

Vitis HLS 学习笔记--抽象并行编程模型-控制驱动与数据驱动

目录 1. 简介 2. Takeaways 3. Data-driven Task-level Parallelism 3.1 simple_data_driven 示例 3.2 分析 hls::task 类 3.3 分析通道(Channel) 3.4 注意死锁 4. Control-driven Task-level Parallelism 4.1 理解控制驱动的 TLP 4.2 simple_control_driven 示例 4…...

Python爬取B站视频:封装一下

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…...

Android Low Storage机制之DeviceStorageMonitorService

一、Android 版本 Android 13 二、low storage简介(DeviceStorageMonitorService) 设备存储监视器服务是一个模块&#xff0c;主要用来&#xff1a; 1.监视设备存储&#xff08;“/ data”&#xff09;。 2.每60秒扫描一次免费存储空间(谷歌默认值) 3.当设备的存储空间不足…...

RestTemplate遇到非RESTful接口怎么办?3种表单参数处理方案对比

RestTemplate应对非RESTful接口的实战指南 在现实开发中&#xff0c;我们常常会遇到各种不符合RESTful规范的接口设计。这些接口可能采用传统的表单传参方式&#xff0c;或是混合了路径参数与查询参数的"四不像"设计。本文将深入探讨三种高效处理这类非标准接口的方案…...

OpCore-Simplify:黑苹果配置的终极简化方案——从复杂到简单的革命性转变

OpCore-Simplify&#xff1a;黑苹果配置的终极简化方案——从复杂到简单的革命性转变 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经因为黑…...

抖音批量下载神器:告别手动保存,一键收藏创作者全部作品

抖音批量下载神器&#xff1a;告别手动保存&#xff0c;一键收藏创作者全部作品 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser f…...

革新性英雄联盟智能辅助解决方案:一站式游戏体验提升工具

革新性英雄联盟智能辅助解决方案&#xff1a;一站式游戏体验提升工具 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英…...

GLM-5.1 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路

GLM-5.1 全面支持与 Gemini CLI 集成&#xff1a;HagiCode 的多模型进化之路 本文介绍了 HagiCode 平台近期的重要更新——智谱 AI GLM-5.1 模型的全面支持&#xff0c;以及 Gemini CLI 作为第十个 Agent CLI 的成功集成。这两项更新进一步强化了平台的多模型能力和多 CLI 生态…...

YOLO12开源模型合规部署:离线环境+审计日志+模型版本固化方案

YOLO12开源模型合规部署&#xff1a;离线环境审计日志模型版本固化方案 1. 项目背景与核心价值 YOLO12作为Ultralytics在2025年推出的最新实时目标检测模型&#xff0c;在保持高速推理性能的同时显著提升了检测精度。其引入的注意力机制优化了特征提取网络&#xff0c;nano版…...

不只是安装:深入理解TI毫米波雷达开发套件(MMWCAS-RF-EVM)的软件生态与数据流

不只是安装&#xff1a;深入理解TI毫米波雷达开发套件&#xff08;MMWCAS-RF-EVM&#xff09;的软件生态与数据流 毫米波雷达技术正在重塑自动驾驶、工业检测和智能安防等领域&#xff0c;而TI的MMWCAS-RF-EVM评估板作为行业标杆工具&#xff0c;其真正的价值往往被简化为"…...

临床数据建模实战:Lasso回归在蛋白质组学中的5个关键应用技巧

临床数据建模实战&#xff1a;Lasso回归在蛋白质组学中的5个关键应用技巧 蛋白质组学数据的高维度特性让传统统计方法束手无策——当检测指标数量达到数千甚至上万时&#xff0c;如何从海量蛋白质中识别出真正有临床意义的生物标志物&#xff1f;这正是Lasso回归大显身手的领域…...

Wan2.2-T2V-A5B常见错误排查:运行失败、生成卡顿的解决方法

Wan2.2-T2V-A5B常见错误排查&#xff1a;运行失败、生成卡顿的解决方法 1. 问题概述与快速诊断 Wan2.2-T2V-A5B作为一款轻量级文本到视频生成模型&#xff0c;虽然在资源消耗和响应速度上具有优势&#xff0c;但在实际使用过程中仍可能遇到运行失败或生成卡顿的问题。这些问题…...

高效智能转换方案:B站缓存视频一键处理实战指南

高效智能转换方案&#xff1a;B站缓存视频一键处理实战指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在B站视频频繁下架的当下&#xff0c…...