Elasticsearch 中文搜索搭建

2024-04-07 06:32

本文主要是介绍Elasticsearch 中文搜索搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Elasticsearch 简称es,本文以elasticsearch2.3.1为例进行安装。
根据自己的需求,替换 usernameserverhost 的值。

预备阶段

本地电脑终端 登录服务器并切换至用户目录下:

$ ssh -o ServerAliveInterval=60 username@serverhost

记得输入username对应的password

$ cd ~

创建目录:

$ mkdir ~/app               # es相关的bin目录
$ mkdir ~/data/es/logs/ -p  # es的log目录
$ mkdir ~/data/es/data/ -p  # es的data目录
$ mkdir ~/local             # es相关java安装目录
$ mkdir ~/pkgs              # es相关安装源文件
$ mkdir ~/workspace         # es相关用户工作空间

安装最新版的java

java
本文以 Linux x64 172.91 MB jdk-8u73-linux-x64.tar.gz

$ cd ~/pkgs
$ wget http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.tar.gz
$ cp jdk-8u73-linux-x64.tar.gz ~/local
$ cd ~/local 
$ tar -zxvf jdk-8u73-linux-x64.tar.gz
$ rm jdk-8u73-linux-x64.tar.gz 

如果你在服务器上面无法下载,可以在 本地电脑终端 上面下载后,再通过scp命令复制到服务器上面的~/pkgs目录下面。假设当前路径包含已下载 jdk-8u73-linux-x64.tar.gz,执行以下命令:

$ scp jdk-8u73-linux-x64.tar.gz username@serverhost:~/pkgs

执行scp命令后,记得username对应输入password!


紧接着,在服务器上面配置java的环境变量。

$ cd ~/local 
$ cd jdk1.8.0_77 
$ pwd
/home/elasticsearch/local/jdk1.8.0_77 
$ vim ~/.bash_profile 

.bash_profile 中添加:

JAVA_HOME=$HOME/local/jdk1.8.0_77
export JAVA_HOME
CLASSPATH=.:$JAVA_HOME/lib
export CLASSPATH

退出并保持修改,使修改立即生效。

$ source ~/.bash_profile
$ java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

安装Elasticsearch最新版

elasticsearch下载

下载最新包并解压到~/app

修改elasticsearch配置

$ cd ~/app/elasticsearch-2.3.1/config
$ vim elasticsearch.yml

在elasticsearch.yml中修改:

path.data: /home/elasticsearch/data/es/data
path.logs: /home/elasticsearch/data/es/logs
cluster.name: yourawesomename
bootstrap.mlockall: true
discovery.zen.minimum_master_nodes: 1
http.port: 9200
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["yourserverhost"]

根据自己的需求,替换 cluster.namediscovery.zen.ping.unicast.hosts值,保存并退出。

安装插件

安装中文分词插件

官网

a. 下载

b. 本地 解压并打包

$ tar -zxvf elasticsearch-analysis-ik-1.9.1.tar.gz
$ cd elasticsearch-analysis-ik-1.9.1
$ mvn package  

c. 服务器上创建 ik 文件夹

$ mkdir ~/app/elasticsearch-2.3.1/plugins/ik -p

d. 上传 本地 打包文件到服务器 ik 文件夹并解压

$ scp target/releases/elasticsearch-analysis-ik-1.9.1.zip username@serverhost:~/app/elasticsearch-2.3.1/plugins/ik

记得输入username对应的password

$ unzip elasticsearch-analysis-ik-1.9.0.zip
$ rm elasticsearch-analysis-ik-1.9.0.zip

服务器上安装数据库importer

$ cd ~/app/
$ wget http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.1.0/elasticsearch-jdbc-2.3.1.0-dist.zip
$ unzip elasticsearch-jdbc-2.3.1.0-dist.zip
$ rm  elasticsearch-jdbc-2.3.1.0-dist.zip

服务器上安装数据库head

官网

$ cd ~/app
$ elasticsearch-2.3.1/bin/plugin install mobz/elasticsearch-head

启动es

$ cd ~/app/elasticsearch-2.3.1
$ ./bin/elasticsearch -d

Reindexing your data with zero downtime

根据自己的需求,替换index_v1, solution.

创建索引
curl -XPUT localhost:9200/index_v1?pretty -d @index_v1.json

index_v1.json中的内容如下所示:

{
"mappings":{"solution": {"_all": {"analyzer": "ik_smart","search_analyzer": "ik_smart","term_vector": "no","store": "false"},"properties": {"btype": {"type": "string","index": "not_analyzed"},"title": {"type": "string","store": "yes","term_vector": "with_positions_offsets","analyzer": "ik_smart","search_analyzer": "ik_smart","include_in_all": "true","boost": 8},"update_time": {"type": "date","store": "yes","format": "dateOptionalTime"}}}}
}

定义索引别名

curl -XPOST localhost:9200/_aliases -d '
{"actions": [{ "add": {"alias": "myindex","index": "index_v1"}}]
}'

服务器上导入数据库数据

$ cd ~/app/elasticsearch-jdbc-2.3.1.0/bin
$ touch index_v1.sh
$ vim index_v1.sh

根据实际情况修改mysql的host:port/database, user, password, sql.

    #!/bin/shDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"bin=${DIR}/../binlib=${DIR}/../libecho '{"type" : "jdbc","jdbc" : {"elasticsearch" : {"cluster" : "yourawesomename","host" : "localhost","port" : 9300},"url" : "jdbc:mysql://host:port/database","user" : "tester","password" : "12345678","sql" : "select id as _id,type as btype,title,update_time from dbtable","index" : "index_v1","type" : "solution","index_settings" : {"index" : {"number_of_shards" : 1}}}}' | java \-cp "${lib}/*" \-Dlog4j.configurationFile=${bin}/log4j2.xml \org.xbib.tools.Runner \org.xbib.tools.JDBCImporter

保存并退出, index_v1.sh; 执行导入数据库脚本index_v1.sh
$ sh index_v1.sh

数据导入耗时依据导入的数据量,导入完成后不会输入任何信息。

需求更改

curl -XPUT localhost:9200/index_v2 -d @index_v2.json

移除index_v1

curl -XPOST localhost:9200/_aliases -d '
{"actions": [{ "remove": {"alias": "myindex","index": "index_v1"}},{ "add": {"alias": "myindex","index": "index_v2"}}]
}'

删除 index_v1

curl -XDELETE localhost:9200/index_v1


踩坑小分队

  • 批量更新『打开文件过多』

管理员权限,更改open files 为65536。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127455
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
  • 批量更新 『无法分配内存』

管理员权限,更改/etc/security/limits.conf, for example:

# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
  • 批量更新 『JVM out of memory』

.bash_profile添加

export ES_HEAP_SIZE=1g  # 更具实际情况设置 free -m查看使用情况  
source .bash_profile    # 立即生效。
  • 批量更新 『 Error: Request error, retrying 』

设置请求批量请求的 [文档大小](
https://www.elastic.co/guide/en/elasticsearch/guide/master/indexing-performance.html#_using_and_sizing_bulk_requests)


这篇关于Elasticsearch 中文搜索搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881867

相关文章

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

Spring Cloud GateWay搭建全过程

《SpringCloudGateWay搭建全过程》:本文主要介绍SpringCloudGateWay搭建全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Spring Cloud GateWay搭建1.搭建注册中心1.1添加依赖1.2 配置文件及启动类1.3 测

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境