Elasticsearch搜索技术实战

article/2025/8/23 13:20:46

elasticsearch下载安装

本篇前述的ES版本是7.14.2,实现了与Mysql的数据同步,ES端的搜索与分词;后来由于和Springcloud(spring-data-elasticsearch:3.0.6)集成发现版本问题,换成ES5.5.0,所以完整的安装到线上运行采用的是ES5.5.0版本。

更全面的教程及docx文档下载请访问http://honglitech.cn/productDetail/8

官网下载后解压ES7.14.2,ES、Kibana、Logstash统一下载地址https://www.elastic.co/cn/downloads/past-releases#elasticsearch

直接在bin目录下执行命令运行:

./elasticsearch

通过docker安装

wanghong@192-200-232-116 ~ % docker pull elasticsearch:7.6.2
7.6.2: Pulling from library/elasticsearch
7.6.2: Pulling from library/elasticsearch
no matching manifest for linux/arm64/v8 in the manifest list entries
wanghong@192-200-232-116 ~ % docker pull elasticsearch:7.14.2
7.14.2: Pulling from library/elasticsearch
333cbcae3fb8: Downloading   39.9MB/75.61MB
7fa00907024c: Downloading  33.07MB/91.75MB
5d68e84eef78: Download complete 
756ca6399aa1: Downloading  69.82MB/343MB
689d68c97e57: Waiting 
43919fab8263: Waiting 
1b2ce3a977ef: Waiting 

在m1使用docker的镜像的时候,如果不支持linux/arm64/v8会提示上面内容。

解决方法:使用支持linux/arm64/v8架构的镜像。

启动命令:

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.14.2

解决跨域问题

进入容器修改配置文件:

docker exec -it elasticsearch /bin/bash
cd /usr/share/elasticsearch/config/
vi elasticsearch.yml

末尾添加

cluster.name: "elasticsearch-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"

保存退出,重启

exit
docker restart elasticsearch

解决找不到java问题

如有关于java建议将JAVA_HOME改为ES_JAVA_HOME的提示,按照提示在bin下的配置文件elasticsearch-env全部修改即可。

具体也可按照以下方式配置:

下载JDK1.8 随意放在任意目录 在环境变量中增加了一个 ES_JDK 指向了刚刚JDK1.8 的目录;

打开ES解压目录找到bin 目录 找到 elasticsearch-env 这个文件,大概在39 - 40 行 将JAVA_HOME换成刚刚配置的ES_JDK。

分析与可视化平台Kibana的下载安装

官网下载与ES版本一致的包,解压,bin下执行命令kibana即可运行。

docker安装Kibana

//拉取
docker pull kibana:7.14.2
//启动
docker run --name kibana --link=elasticsearch:7.14.2 -p 5601:5601 -d kibana:7.14.2

浏览器输入地址访问Kibana:http://localhost:5601或者http://localhost:5601/app/kibana

Management里通过Dev tools打开命令终端。

查询所有索引

通过Postman请求链接

get http://127.0.0.1:9200/_cat/indices?v

或者浏览器访问

Logstash使ES和Mysql数据同步

原理架构图:

在集群环境下的Logstash的安装配置

下载与ES版本一致的Logstash,解压。

安装jdbc插件,bin目录下执行:

./logstash-plugin install logstash-input-jdbc

安装logstash-output-elasticsearch插件,bin目录下执行:

./logstash-plugin install logstash-output-elasticsearch

在安装程序lib目录下,放置连接mysql的jar,mysql-connector-java-5.1.46.jar,注意版本,不能过低。

配置文件夹conf下添加mysql.conf,其内容如下:

input {
stdin {}
jdbc {# 多表同步时,表类型区分,建议命名为“库名_表名”,每个jdbc模块需对应一个type;
type => "taodong-goods_product"# 数据库连接地址
jdbc_connection_string => "jdbc:mysql://localhost:3306/taodong-goods"# 数据库连接账号密码;
jdbc_user => "root"
jdbc_password => "123abc!*"# MySQL依赖包路径;
jdbc_driver_library => "/usr/local/logstash-8.6.2/lib/mysql-connector-java-5.1.46.jar"# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"# 数据库重连尝试次数
connection_retry_attempts => "3"# 判断数据库连接是否可用,默认false不开启
jdbc_validate_connection => "true"# 数据库连接可用校验超时时间,默认3600S
jdbc_validation_timeout => "3600"# 开启分页查询(默认false不开启);
jdbc_paging_enabled => "true"# 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值);
jdbc_page_size => "500"# statement为查询数据sql,如果sql较复杂,建议配通过statement_filepath配置sql文件的存放路径;# sql_last_value为内置的变量,存放上次查询结果中最后一条数据tracking_column的值,此处即为ModifyTime;# statement_filepath => "mysql/jdbc.sql"
statement => "SELECT * FROM product WHERE UPDATED_TIME >= :sql_last_value"use_column_value => truetracking_column_type => "timestamp"tracking_column => "updated_time"last_run_metadata_path => "syncpoint_product_table"# 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false;
clean_run => false## 同步频率(分 时 天 月 年),默认每分钟同步一次;
schedule => "* * * * *"
}
jdbc {# 多表同步时,表类型区分,建议命名为“库名_表名”,每个jdbc模块需对应一个type;
type => "taodong-goods_category"
# 数据库连接地址
jdbc_connection_string => "jdbc:mysql://localhost:3306/taodong-goods"# 数据库连接账号密码;
jdbc_user => "root"
jdbc_password => "123abc!*"# MySQL依赖包路径;
jdbc_driver_library => "/usr/local/logstash-8.6.2/lib/mysql-connector-java-5.1.46.jar"# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"# 数据库重连尝试次数
connection_retry_attempts => "3"# 判断数据库连接是否可用,默认false不开启
jdbc_validate_connection => "true"# 数据库连接可用校验超时时间,默认3600S
jdbc_validation_timeout => "3600"# 开启分页查询(默认false不开启);
jdbc_paging_enabled => "true"# 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值);
jdbc_page_size => "500"# statement为查询数据sql,如果sql较复杂,建议配通过statement_filepath配置sql文件的存放路径;# sql_last_value为内置的变量,存放上次查询结果中最后一条数据tracking_column的值,此处即为ModifyTime;# statement_filepath => "mysql/jdbc.sql"
statement => "SELECT * FROM category WHERE UPDATED_TIME >= :sql_last_value"use_column_value => truetracking_column_type => "timestamp"tracking_column => "updated_time"last_run_metadata_path => "syncpoint_category_table"# 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false;
clean_run => false## 同步频率(分 时 天 月 年),默认每分钟同步一次;
schedule => "* * * * *"
}
}filter {
json {
source => "message"
remove_field => ["message"]
}
}output {
# output模块的type需和jdbc模块的type一致
if [type] == "taodong-goods_product" {x
elasticsearch {# host => "0.0.0.0"# port => "9200"# 配置ES集群地址
hosts => ["ip:9201", "ip:9202", "ip:9203"]# 索引名字,必须小写
index => "product"# 数据唯一索引(建议使用数据库KeyID)
document_id => "%{id}"document_type => "product"
}

更全面的教程及docx文档下载请访问http://honglitech.cn/productDetail/8


http://chatgpt.dhexx.cn/article/EDBIjmHb.shtml

相关文章

Docker技术

在这里插入代码片# Docker 官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are…

Elasticsearch - 文档分析,IK分词器;文档冲突(十二)

阅读本文前可先参考 Elasticsearch - Elasticsearch详解;安装部署(一)_MinggeQingchun的博客-CSDN博客 https://blog.csdn.net/MinggeQingchun/article/details/126855747 一、文档分析 文档分析过程如下: 1、将一块文本分成适…

springboot+Elasticsearch实现word,pdf,txt内容抽取并高亮分词全文检索

文章目录 需求 一、环境 二、功能实现 1.搭建环境 2.文件内容识别 三.代码 需求 产品希望我们这边能够实现用户上传PDF,WORD,TXT之内得文本内容,然后用户可以根据附件名称或文件内容模糊查询文件信息,并可以在线查看文件内容 一、环境 项目开发环境&…

使用lucce分词怎么_ElasticSearch 分词器,了解一下

这篇文章主要来介绍下什么是 Analysis ,什么是分词器,以及 ElasticSearch 自带的分词器是怎么工作的,最后会介绍下中文分词是怎么做的。 首先来说下什么是 Analysis: 什么是 Analysis? 顾名思义,文本分析就…

自然语言处理 # 中文分词技术 概述

定义 中文分词(Chinese Word Segmentation)就是将连续的字序列按照一定的规范重新组合成词序列的过程。 Ques:为什么要分词? Ans: 词是最小的能够独立运用的语言单位 Ques:什么是独立运用呢? Ans:它可以解释为“单独做句法成分或…

Python 中 concurrent.futures 模块使用说明

Python 中 concurrent.futures 模块使用说明 转载请注明出处:https://blog.csdn.net/jpch89/article/details/87643972 文章目录 Python 中 concurrent.futures 模块使用说明0. 参考资料1. 概述2. Executor Object 执行器对象3. ThreadPoolExecutor 线程池执行器4.…

【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo

前言 ruoyi 4.6.0jdk1.8 错误 11:48:16.879 [http-nio-9031-exec-25] INFO c.r.f.s.r.UserRealm - [doGetAuthenticationInfo,128] - 对用户[admin]进行登录验证..验证未通过{} java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThre…

【学习积累】Queue 与 ConcurrentQueue性能测试

在 C# 中&#xff0c;关于队列&#xff08;Queue&#xff09;有两种&#xff0c;一种就是我们普通使用的队列&#xff0c;另一种是线程安全的队列 ConcurrentQueue<T> 。 ConcurrentQueue表示线程安全的先进先出 (FIFO) 集合。https://learn.microsoft.com/zh-cn/dotnet…

Python报错ModuleNotFoundError: No module named ‘concurrent‘

在测试Python的多线程时&#xff0c;根据官方的说法&#xff0c;concurrent.futures在Python3中已经内置了&#xff0c;不需要下载安装&#xff0c;如果是Python2则需要运行pip install futures进行安装。。。 这样导入&#xff0c;两种写法均可 import concurrent.futures #…

go语言工具_Concurrent Map

Concurrent Map 背景 map是平时项目中经常用到的数据类型&#xff0c;但是如果多个协程去读写同一个map时&#xff0c;为了不发生数据错误&#xff0c;经常去将其和锁封装成一个新的map。像以下两种示例。 type LockMap struct { m map[interface{}]interface{} l…

C#线程安全队列ConcurrentQueue

ConcurrentQueue成员函数 入队(EnQueue) 、出队(TryDequeue) 、是否为空(IsEmpty)、获取队列内元素数量(Count)。 void Enqueue(T item) 入队函数&#xff0c;当队列已满时会自动增加队列容量。 bool TryDequeue(T* result) 尝试移除并返回并发队列开头处对象&#xff0c;…

项目优化>C++,concurrentqueue(高性能并发队列)

项目中的数据队列基于轮询和selep的实时性及CUP性能差&#xff0c;需要进行优化&#xff0c;尝试使用concurrentqueue进行优化。网上有一些资料介绍,可供参考。 使用后的个人理解:一个线程安全的queue&#xff0c;并且concurrentqueue的线程安全并不是一味的加锁&#xff0c;它…

ConcurrentMap

ConcurrentMap&#xff0c;它是一个接口&#xff0c;是一个能够支持并发访问的java.util.map集合&#xff1b; ConcurrentHashMap是一个线程安全&#xff0c;并且是一个高效的HashMap。 spring 缓存注解 通过查看源代码发现将数据存在ConcurrentMap中 1 Map并发集合 1.1 Co…

学习线程安全队列ConcurrentQueue

首先,基本使用&#xff1a;入队(EnQueue) 、出队(TryDequeue) 、是否为空(IsEmpty)、获取队列内元素数量(Count)。 一、ConcurrentQueue内部结构: 1.实现原理 众所周知&#xff0c;在普通的非线程安全队列有两种实现方式: 1.使用数组实现的循环队列。 2.使用链表实现的队列…

并发系列(六)-----concurrent的简单介绍

一 简介 concurrent包是jdk1.5引入的重要的包&#xff0c;主要代码由大牛Doug Lea完成。这个包下的一些类如果用好了可以很方便的保证数据在多线程下操作的正确性。就比如说线程共享的i&#xff0c;如果使用concurrent包下的Atomic系列类可以很方便的解决这个问题。这篇文章简单…

python并发之concurrent快速入门

导读&#xff1a;我很笨&#xff0c;但是我很快——计算机之所以计算能力如此出众&#xff0c;不在于其有多智能&#xff0c;而是因为它超快的执行速度&#xff0c;而多核心则可以进一步成倍的提高效率。在python中&#xff0c;concurrent库就是用于完成并发的模块之一。 01 初…

Java 并发工具包(concurrent)详解

目录 一、concurrent并发包 二、ReentrantLock&#xff08;可重入锁&#xff09; 1、锁状态中断与可重入 2、尝试非阻塞地获取锁 3、等待可中断 4、设置公平锁 三、CountDownLatch&#xff08;门栓&#xff09; 四、cyclicBarrier&#xff08;栅栏&#xff09; 五、…

JAVA中split函数的用法

JAVA中split函数的用法 只写经常使用的&#xff0c;并不完整。 1.基本用法&#xff0c;将字符串按照指定字符串进行分割&#xff0c;例如&#xff1a; public class Main {public static void main(String[] args) {String ss "abcabcdefg";String[] split ss.sp…

C语言实现split函数

实现类似JAVA编程语言中split函数&#xff1a; &#xff08;这里以空格为分隔符进行演示&#xff09; 函数的声明&#xff1a;void split(char *src,const char *separator,char **dest,int *num) {}变量&#xff1a; 1.*src&#xff1a;要进行分割的字符串地址&#xff0c; 2…

mysql实现自定义split函数

1、自定义split函数脚本 CREATE DEFINER root% FUNCTION tjdemo.fun_get_split_string_total(f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT BEGIN declare returnInt int(11…