摘要:介紹是一個(gè)基于的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于接口。是用開發(fā)的,并作為許可條款下的開放源碼發(fā)布,是當(dāng)前流行的企業(yè)級搜索引擎。本文從零開始,講解如何使用搭建自己的全文搜索引擎。
介紹
ElasticSearch 是一個(gè)基于 Lucene 的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 開發(fā)的,并作為 Apache 許可條款下的開放源碼發(fā)布,是當(dāng)前流行的企業(yè)級搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。基百科、Stack Overflow、Github 都采用它。
本文從零開始,講解如何使用 Elasticsearch 搭建自己的全文搜索引擎。每一步都有詳細(xì)的說明,大家跟著做就能學(xué)會(huì)。
1、VMware
2、Centos 6.6
3、Elasticsearch 5.5.2
4、JDK 1.8
VMware 安裝以及在 VMware 中安裝 Centos 這個(gè)就不說了,環(huán)境配置直接默認(rèn)就好,不過分配給機(jī)器的內(nèi)存最好設(shè)置大點(diǎn)(建議 2G),
使用 dhclient 命令來自動(dòng)獲取 IP 地址,查看獲取的 IP 地址則使用命令 ip addr 或者 ifconfig ,則會(huì)看到網(wǎng)卡信息和 lo 卡信息。
給虛擬機(jī)額中的 linux 設(shè)置固定的 ip(因?yàn)楹竺姘l(fā)現(xiàn)每次機(jī)器重啟后又要重新使用 dhclient 命令來自動(dòng)獲取 IP 地址)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:
onboot=yes bootproto=static
增加:(下面可設(shè)置可不設(shè)置)
IPADDR=192.168.1.113 網(wǎng)卡IP地址 GATEWAY=192.168.1.1 NETMASK=255.255.255.0
設(shè)置好之后,把網(wǎng)絡(luò)服務(wù)重啟一下, service network restart
修改 ip 地址參考: http://jingyan.baidu.com/arti...
大環(huán)境都準(zhǔn)備好了,下面開始安裝步驟:
安裝 JDK 1.8先卸載自帶的 openjdk,查找 openjdk
rpm -qa | grep java
卸載 openjdk
yum -y remove java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el65.x8664 yum -y remove java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
解壓 JDK 安裝包:
附上jdk1.8的下載地址:
http://www.oracle.com/technet...
解壓完成后配置一下環(huán)境變量就 ok
1、在/usr/local/下創(chuàng)建Java文件夾
cd /usr/local/ 進(jìn)入目錄 mkdir java 新建java目錄
2、文件夾創(chuàng)建完畢,把安裝包拷貝到 Java 目錄中,然后解壓 jdk 到當(dāng)前目錄
cp /usr/jdk-8u144-linux-x64.tar.gz /usr/local/java/ **注意匹配你自己的文件名** 拷貝到j(luò)ava目錄 tar -zxvf jdk-8u144-linux-x64.tar.gz 解壓到當(dāng)前目錄(Java目錄)
3、解壓完之后,Java目錄中會(huì)出現(xiàn)一個(gè)jdk1.8.0_144的目錄,這就解壓完成了。之后配置一下環(huán)境變量。
編輯/etc/下的profile文件,配置環(huán)境變量
vi /etc/profile 進(jìn)入profile文件的編輯模式 在最后邊追加一下內(nèi)容(**配置的時(shí)候一定要根據(jù)自己的目錄情況而定哦!**) JAVA_HOME=/usr/local/java/jdk1.8.0_144 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH
之后保存并退出文件之后。
讓文件生效: source /etc/profile
在控制臺(tái)輸入Java 和 Java -version 看有沒有信息輸出,如下: java -version
java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)
能顯示以上信息,就說明 JDK 安裝成功啦
安裝 Maven因?yàn)楹竺婵赡軙?huì)用到 maven ,先裝上這個(gè)。
1、下載 maven
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz
2、解壓至 /usr/local 目錄
tar -zxvf apache-maven-3.2.5-bin.tar.gz
3、配置公司給的配置
替換成公司給的 setting.xml 文件,修改關(guān)于本地倉庫的位置, 默認(rèn)位置: ${user.home}/.m2/repository
4、配置環(huán)境變量etc/profile 最后添加以下兩行
export MAVEN_HOME=/usr/local/apache-maven-3.2.5 export PATH=${PATH}:${MAVEN_HOME}/bin
5、測試
[root@localhost ~]# mvn -v Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T09:29:23-08:00) Maven home: /usr/local/apache-maven-3.2.5
VMware 虛擬機(jī)里面的三臺(tái)機(jī)器 IP 分別是:
192.168.153.133 192.168.153.134 192.168.153.132配置 hosts
在 /etc/hosts下面編寫:ip node 節(jié)點(diǎn)的名字(域名解析)
vim /etc/hosts
新增:
192.168.153.133 es1 192.168.153.134 es2 192.168.153.132 es3設(shè)置 SSH 免密碼登錄
安裝expect命令 : yum -y install expect
將 ssh_p2p.jar 隨便解壓到任何目錄下: (這個(gè) jar 包可以去網(wǎng)上下載)
unzip ssh_p2p.zip
修改 resource 的 ip 值
vim /ssh_p2p/deploy_data/resource (各個(gè)節(jié)點(diǎn)和賬戶名,密碼,free代表相互都可以無密碼登陸)
#設(shè)置為你每臺(tái)虛擬機(jī)的ip地址,用戶名,密碼 address=( "192.168.153.133,root,123456,free" "192.168.153,134,root,123456,free" "192.168.153.132,root,123456,free" )
修改 start.sh 的運(yùn)行權(quán)限
chmod u+x start.sh
運(yùn)行
./start.sh
測試:
ssh ip地址 (測試是否可以登錄)
安裝 ElasticSearch下載地址: https://www.elastic.co/downlo...
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz cd /usr/local tar -zxvf elasticsearch-5.5.2.tar.gz
su tzs 切換到 tzs 用戶下 ( 默認(rèn)不支持 root 用戶)
sh /usr/local/elasticsearch/bin/elasticsearch -d 其中 -d 表示后臺(tái)啟動(dòng)
在 vmware 上測試是否成功:curl http://localhost:9200/
出現(xiàn)如上圖這樣的效果,就代表已經(jīng)裝好了。
elasticsearch 默認(rèn) restful-api 的端口是 9200 不支持 IP 地址,也就是說無法從主機(jī)訪問虛擬機(jī)中的服務(wù),只能在本機(jī)用 http://localhost:9200 來訪問。如果需要改變,需要修改配置文件 /usr/local/elasticsearch/config/elasticsearch.yml 文件,加入以下兩行:
network.bind_host: 0.0.0.0 network.publish_host: _nonloopback:ipv4
或去除 network.host 和 http.port 之前的注釋,并將 network.host 的 IP 地址修改為本機(jī)外網(wǎng) IP。然后重啟,Elasticsearch
關(guān)閉方法(輸入命令: ps -ef | grep elasticsearch ,找到進(jìn)程,然后 kill 掉就行了。
如果外網(wǎng)還是不能訪問,則有可能是防火墻設(shè)置導(dǎo)致的 ( 關(guān)閉防火墻:service iptables stop )
修改配置文件:vim config/elasticsearch.yml
cluster.name : my-app (集群的名字,名字相同的就是一個(gè)集群)
node.name : es1 (節(jié)點(diǎn)的名字, 和前面配置的 hosts 中的 name 要一致)
path.data: /data/elasticsearch/data (數(shù)據(jù)的路徑。沒有要?jiǎng)?chuàng)建(mkdir -p /data/elasticsearch/{data,logs}),并且給執(zhí)行用戶權(quán)限 chown tzs /data/elasticsearch/{data,logs} -R )
path.logs: /data/elasticsearch/logs (數(shù)據(jù) log 信息的路徑,同上)
network.host: 0.0.0.0 //允許外網(wǎng)訪問,也可以是自己的ip地址
http.port: 9200 //訪問的端口
discovery.zen.ping.unicast.hosts: ["192.168.153.133", "192.168.153.134", "192.168.153.132"] //各個(gè)節(jié)點(diǎn)的ip地址
記得需要添加上:(這個(gè)是安裝 head 插件要用的, 目前不需要)
http.cors.enabled: true
http.cors.allow-origin: "*"
最后在外部瀏覽器的效果如下圖:
安裝 IK 中文分詞可以自己下載源碼使用 maven 編譯,當(dāng)然如果怕麻煩可以直接下載編譯好的
https://github.com/medcl/elas...
注意下載對應(yīng)的版本放在 plugins 目錄下
解壓
unzip elasticsearch-analysis-ik-5.5.2.zip
在 es 的 plugins 下新建 ik 目錄
mkdir ik
將剛才解壓的復(fù)制到ik目錄下
cp -r elasticsearch/* ik
刪除剛才解壓后的
rm -rf elasticsearch rm -rf elasticsearch-analysis-ik-5.5.2.zipIK 帶有兩個(gè)分詞器
ik_max_word :會(huì)將文本做最細(xì)粒度的拆分;盡可能多的拆分出詞語
ik_smart:會(huì)做最粗粒度的拆分;已被分出的詞語將不會(huì)再次被其它詞語占有
安裝完 IK 中文分詞器后(當(dāng)然不止這種中文分詞器,還有其他的,可以參考我的文章 Elasticsearch 默認(rèn)分詞器和中分分詞器之間的比較及使用方法),測試區(qū)別如下:
curl -XGET "http://192.168.153.134:9200/_..." -d "聯(lián)想是全球最大的筆記本廠商"
{ "tokens" : [ { "token" : "聯(lián)想", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "是", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 1 }, { "token" : "全球", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 2 }, { "token" : "最大", "start_offset" : 5, "end_offset" : 7, "type" : "CN_WORD", "position" : 3 }, { "token" : "的", "start_offset" : 7, "end_offset" : 8, "type" : "CN_CHAR", "position" : 4 }, { "token" : "筆記本", "start_offset" : 8, "end_offset" : 11, "type" : "CN_WORD", "position" : 5 }, { "token" : "筆記", "start_offset" : 8, "end_offset" : 10, "type" : "CN_WORD", "position" : 6 }, { "token" : "本廠", "start_offset" : 10, "end_offset" : 12, "type" : "CN_WORD", "position" : 7 }, { "token" : "廠商", "start_offset" : 11, "end_offset" : 13, "type" : "CN_WORD", "position" : 8 } ] }
curl -XGET "http://localhost:9200/_analyz..." -d "聯(lián)想是全球最大的筆記本廠商"
{ "tokens" : [ { "token" : "聯(lián)想", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "是", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 1 }, { "token" : "全球", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 2 }, { "token" : "最大", "start_offset" : 5, "end_offset" : 7, "type" : "CN_WORD", "position" : 3 }, { "token" : "的", "start_offset" : 7, "end_offset" : 8, "type" : "CN_CHAR", "position" : 4 }, { "token" : "筆記本", "start_offset" : 8, "end_offset" : 11, "type" : "CN_WORD", "position" : 5 }, { "token" : "廠商", "start_offset" : 11, "end_offset" : 13, "type" : "CN_WORD", "position" : 6 } ] }安裝 head 插件
elasticsearch-head 是一個(gè) elasticsearch 的集群管理工具,它是完全由 html5 編寫的獨(dú)立網(wǎng)頁程序,你可以通過插件把它集成到 es。
效果如下圖:(圖片來自網(wǎng)絡(luò))
安裝 gityum remove git yum install git git clone git://github.com/mobz/elasticsearch-head.git 拉取 head 插件到本地,或者直接在 GitHub 下載 壓縮包下來安裝nodejs
先去官網(wǎng)下載 node-v8.4.0-linux-x64.tar.xz
tar -Jxv -f node-v8.4.0-linux-x64.tar.xz mv node-v8.4.0-linux-x64 node
環(huán)境變量設(shè)置:
vim /etc/profile
新增:
export NODE_HOME=/opt/node export PATH=$PATH:$NODE_HOME/bin export NODE_PATH=$NODE_HOME/lib/node_modules
使配置文件生效(這步很重要,自己要多注意這步)
source /etc/profile
測試是否全局可用了:
node -v
然后
mv elasticsearch-head head cd head/ npm install -g grunt-cli npm install grunt server
再 es 的配置文件中加:
http.cors.enabled: true http.cors.allow-origin: "*"
在瀏覽器打開 http://192.168.153.133:9100/ 就可以看到效果了,
遇到問題把坑都走了一遍,防止以后再次入坑,特此記錄下來
1、ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
改變 elasticsearch 文件夾所有者到當(dāng)前用戶
sudo chown -R noroot:noroot elasticsearch
這是因?yàn)?elasticsearch 需要讀寫配置文件,我們需要給予 config 文件夾權(quán)限,上面新建了 elsearch 用戶,elsearch 用戶不具備讀寫權(quán)限,因此還是會(huì)報(bào)錯(cuò),解決方法是切換到管理員賬戶,賦予權(quán)限即可:
sudo -i
chmod -R 775 config
2、WARN [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
原因是elasticsearch默認(rèn)是不支持用root用戶來啟動(dòng)的。
解決方案一:Des.insecure.allow.root=true
修改/usr/local/elasticsearch-2.4.0/bin/elasticsearch,
添加 ES_JAVA_OPTS="-Des.insecure.allow.root=true"
或執(zhí)行時(shí)添加: sh /usr/local/elasticsearch-2.4.0/bin/elasticsearch -d -Des.insecure.allow.root=true
注意:正式環(huán)境用root運(yùn)行可能會(huì)有安全風(fēng)險(xiǎn),不建議用root來跑。
解決方案二:添加專門的用戶
useradd elastic chown -R elastic:elastic elasticsearch-2.4.0 su elastic sh /usr/local/elasticsearch-2.4.0/bin/elasticsearch -d
3、UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
只是警告,使用新的linux版本,就不會(huì)出現(xiàn)此類問題了。
4、ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
原因:無法創(chuàng)建本地文件問題,用戶最大可創(chuàng)建文件數(shù)太小
解決方案:切換到 root 用戶,編輯 limits.conf 配置文件, 添加類似如下內(nèi)容:
vim /etc/security/limits.conf
添加如下內(nèi)容:
* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
[2]: max number of threads [1024] for user [tzs] is too low, increase to at least [2048]
原因:無法創(chuàng)建本地線程問題,用戶最大可創(chuàng)建線程數(shù)太小
解決方案:切換到root用戶,進(jìn)入limits.d目錄下,修改90-nproc.conf 配置文件。
vim /etc/security/limits.d/90-nproc.conf
找到如下內(nèi)容:
soft nproc 1024
修改為
soft nproc 2048
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:最大虛擬內(nèi)存太小
root用戶執(zhí)行命令:
sysctl -w vm.max_map_count=262144
或者修改 /etc/sysctl.conf 文件,添加 “vm.max_map_count”設(shè)置
設(shè)置后,可以使用
$ sysctl -p
[4]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
原因:Centos6不支持SecComp,而ES5.4.1默認(rèn)bootstrap.system_call_filter為true進(jìn)行檢測,所以導(dǎo)致檢測失敗,失敗后直接導(dǎo)致ES不能啟動(dòng)。
詳見 :https://github.com/elastic/el...
解決方法:在elasticsearch.yml中新增配置bootstrap.system_call_filter,設(shè)為false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
5、 java.lang.IllegalArgumentException: property [elasticsearch.version] is missing for plugin [head]
再 es 的配置文件中加:
http.cors.enabled: true http.cors.allow-origin: "*"最后
整個(gè)搭建的過程全程自己手動(dòng)安裝,不易,如果安裝很多臺(tái)機(jī)器,是否可以寫個(gè)腳本之類的自動(dòng)搭建呢?可以去想想的。首發(fā)于:http://www.54tianzhisheng.cn/...,轉(zhuǎn)載請注明出處,謝謝配合!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/70391.html
摘要:介紹是一個(gè)基于的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于接口。是用開發(fā)的,并作為許可條款下的開放源碼發(fā)布,是當(dāng)前流行的企業(yè)級搜索引擎。本文從零開始,講解如何使用搭建自己的全文搜索引擎。 介紹 ElasticSearch 是一個(gè)基于 Lucene 的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch ...
摘要:當(dāng)時(shí)自己在本地測試搭建集群后,給分配了另外一個(gè)任務(wù)就是去了解中的自帶分詞英文分詞中文分詞的相同與差異以及自己建立分詞需要注意的點(diǎn)。還有就是官網(wǎng)的文檔了,非常非常詳細(xì),還有,版本的是有中文的官方文檔,可以湊合著看。 前提 人工智能、大數(shù)據(jù)快速發(fā)展的今天,對于 TB 甚至 PB 級大數(shù)據(jù)的快速檢索已然成為剛需,大型企業(yè)早已淹沒在系統(tǒng)生成的浩瀚數(shù)據(jù)流當(dāng)中。大數(shù)據(jù)技術(shù)業(yè)已集中在如何存儲(chǔ)和處理這...
閱讀 3512·2023-04-25 17:35
閱讀 2587·2021-11-24 09:39
閱讀 2525·2021-10-18 13:32
閱讀 3409·2021-10-11 10:58
閱讀 1630·2021-09-26 09:55
閱讀 6134·2021-09-22 15:47
閱讀 958·2021-08-26 14:15
閱讀 3465·2019-08-30 15:55