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.type=single-node" b0e9f9f047e6
-d:后台启动
--name:容器名称
-p:端口映射
-e:设置环境变量
discovery.type=single-node:单机运行
b0e9f9f047e6:镜像id
如果启动不了,可以加大内存设置:-e ES_JAVA_OPTS="-Xms512m -Xmx512m"
检查如何启动成功,访问9200端口即可
安装 ik 分词器
先查看号然后进入到里面
docker ps
docker exec -it es bash
进去之后输入
./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
分词结果
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: "*"
然后到界面localhost:9100进行连接
使用(初步整合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()));
}
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中所有表的外键
方法一: 原理 查询schema中所有外键名称然后拼接生成删除语句 第一步: 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项目相关问题
前言 这个迭代后端需求偏少,前端code的键盘都起火星子了。来了4个外包支持,1个后端3个前端,还是不够用啊。刚好趁这个机会稍微学习下vue,其实之前环境也配置过了,所以这里就不分享环境配置了,主要分享下新建…...
2024年高考考务人员网上培训参考答案
第1部分:单选题 1. 关于试卷保密室负责人职责,以下说法不正确的是(B) [2分] A. 负责试卷的接收、保管和发放工作 B. 试卷保密室内屋门锁钥匙和铁柜门锁钥匙必须由同一人保管 C. 试卷接收和发放应当当面清点试卷袋数量&#…...

JavaEE之线程(9) _定时器的实现代码
前言 定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”。 达到一个设定的时间之后,就执行某个指定好的代码,比如: 在受上述场景中,当客户端发出去请求之后, 就要等待响应,如果服务器迟迟没有响应&…...
纯前端实现将页面数据下载word文档中【包括图片,echarts图,表格,和对话 内容】
亲测真实有效 导出word步骤 在Vue中导出Word文档,可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库: npm install file-saver html-docx-js --save "html-docx-js": "0.3.1","file-saver": "2.0.5…...

JavaSE——类和对象(二)~~封装
目录 一.封装 二.封装扩展之包 三.static成员 四. 代码块 五. 内部类(重要) 大家好呀,我是北纬,接着上节我们继续讲解Java中关于类和对象的相关知识,今天着重给大家介绍一下关于面向对象程序的特性之一——封装。…...
头歌OpenGauss数据库-I.复杂查询第9关:交换性别
任务描述 本关任务:给定一张 tb_Salary 表,如下所示,有 m 男性 和 f 女性的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。 idnamesexsalary1Elonf70002Donnyf80003Careym60…...

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

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

文心智能体,零代码构建情感表达大师智能体
前言 随着智能体技术的突飞猛进,各行各业正迎来前所未有的变革与机遇。智能体,作为人工智能领域的重要分支,以其自主性、智能性和适应性,正逐步渗透到我们生活的每一个角落,成为推动社会进步和科技发展的新动力。 为了…...
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…...
「贪心算法」柠檬水找零
力扣原题链接,点击跳转。 假设你的手里没有钱。你要卖柠檬水,每杯5块钱。每个顾客有可能会给你5块钱、10块钱或20块钱,你要拿手中的钱找零。如何判断你能否成功找零呢? 如果一上来就有顾客花10块钱或20块钱,你手中没…...

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

Python使用virtualenv创建虚拟环境
目录 第一步:安装virtualenv 第二步:选择一个文件夹用来放所创建的虚拟环境 第三步:创建虚拟环境 第四步:激活虚拟环境 第五步:退出虚拟环境 第六步:测试安装django 前提:你得有个python环…...
LuatOS-Air二次开发学习
LuatOS简介 在介绍LuatOS-Air之前,先介绍下LuatOS。 LuatOS是合宙自研的嵌入式操作系统。覆盖各类物联网应用场景,可运行于4G Cat.1/MCU/NB-IoT/2G/Wi-Fi/蓝牙等等不同的物联网主控芯片。通过完善的嵌入式操作系统LuatOS,使得物联网主控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站视频:封装一下
📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…...

Android Low Storage机制之DeviceStorageMonitorService
一、Android 版本 Android 13 二、low storage简介(DeviceStorageMonitorService) 设备存储监视器服务是一个模块,主要用来: 1.监视设备存储(“/ data”)。 2.每60秒扫描一次免费存储空间(谷歌默认值) 3.当设备的存储空间不足…...
关于近期中国移动民用家庭网络,新增的UDP网络限制。
在近期中国移动在全国一定范围普及新的打击 “PCDN、P2P、HY/HY2” 等流氓网络应用的技术方案,并接入在 “省/州” 的边界网关路由上。 根据遥测数据的具体研究分析,且本人曾非常生气的详细质询过,移动城域网管理人员,可以确认该技…...

历年中国科学技术大学计算机保研上机真题
2025中国科学技术大学计算机保研上机真题 2024中国科学技术大学计算机保研上机真题 2023中国科学技术大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school?classification1 拆分数字 题目描述 给定一个数字,拆分成若干个数字之和ÿ…...
全面解析:npm 命令、package.json 结构与 Vite 详解
全面解析:npm 命令、package.json 结构与 Vite 详解 一、npm run dev 和 npm run build 命令解析 1. npm run dev 作用:启动开发服务器,用于本地开发原理: 启动 Vite 开发服务器提供实时热更新(HMR)功能…...

VMware-workstation安装教程--超详细(附带安装包)附带安装CentOS系统教程
VMware-workstation安装教程--超详细(附带安装包)附带安装CentOS系统教程 一、下载软件VMwware二、下载需要的镜像三、在VMware上安装系统 一、下载软件VMwware 二、下载需要的镜像 三、在VMware上安装系统 VMware 被 Broadcom(博通&#x…...
MySQL 8.0:解析
引言 MySQL 8.0 作为里程碑版本,在功能、性能、安全性等维度进行了全面革新。以下从技术实现、应用场景和实践挑战三个层面,深度解析其核心特性变化: 一、架构级重构:数据字典与原子 DDL 1. 事务性数据字典 技术实现…...

设备制造行业项目管理难点解析,如何有效解决?
在设备制造行业,项目管理是企业运营的核心环节,直接影响项目交付效率、成本控制和盈利能力。然而,由于行业特性复杂、项目周期长、涉及部门多,企业在实际操作中常常面临诸多管理痛点。金众诚工程项目管理系统,依托金蝶…...

如何手搓扫雷(待扩展)
文章目录 一、扫雷游戏分析与设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 文件结构设计 二、扫雷游戏的代码实现三、扫雷游戏的扩展总结 一、扫雷游戏分析与设计 扫雷游戏网页版 1.1 扫雷游戏的功能说明 使用控制台(黑框框的程序&a…...

智慧体育馆数字孪生,场馆管理智能化
图扑数字孪生智慧体育馆可视化管理平台。通过高精度三维建模,对体育馆建筑结构、设施设备等进行 1:1 虚拟映射,全方位还原场馆物理实体。系统集成多维度传感器数据,实现对人流量、客流密度、区域拥堵指数等信息的实时采集与分析,动…...

第12讲、Odoo 18 权限控制机制详解
目录 引言权限机制概述权限组(Groups)访问控制列表(ACL)记录规则(Record Rules)字段级权限控制按钮级权限控制菜单级权限控制综合案例:多层级权限控制最佳实践与注意事项总结 引言 Odoo 18 提…...

openresty+lua+redis把非正常访问的域名加入黑名单
一、验证lua geoIp2是否缺少依赖 1、执行命令 /usr/local/openresty/bin/opm get anjia0532/lua-resty-maxminddb 执行安装命令报错,缺少Digest/MD5依赖 2、Digest/MD5依赖 yum -y install perl-Digest-MD5 GeoIP2 lua库依赖动态库安装,lua库依赖libmaxminddb实…...