摘要:介紹是一個基于的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于接口。是用開發的,并作為許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。本文從零開始,講解如何使用搭建自己的全文搜索引擎。
介紹
ElasticSearch 是一個基于 Lucene 的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 開發的,并作為 Apache 許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。基百科、Stack Overflow、Github 都采用它。
本文從零開始,講解如何使用 Elasticsearch 搭建自己的全文搜索引擎。每一步都有詳細的說明,大家跟著做就能學會。
環境1、VMware
2、Centos 6.6
3、Elasticsearch 5.5.2
4、JDK 1.8
VMware 安裝以及在 VMware 中安裝 Centos 這個就不說了,環境配置直接默認就好,不過分配給機器的內存最好設置大點(建議 2G),
使用 dhclient 命令來自動獲取 IP 地址,查看獲取的 IP 地址則使用命令 ip addr 或者 ifconfig ,則會看到網卡信息和 lo 卡信息。
給虛擬機額中的 linux 設置固定的 ip(因為后面發現每次機器重啟后又要重新使用 dhclient 命令來自動獲取 IP 地址)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:
onboot=yes bootproto=static
增加:(下面可設置可不設置)
IPADDR=192.168.1.113 網卡IP地址 GATEWAY=192.168.1.1 NETMASK=255.255.255.0
設置好之后,把網絡服務重啟一下, service network restart
修改 ip 地址參考: http://jingyan.baidu.com/arti...
大環境都準備好了,下面開始安裝步驟:
安裝 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...
解壓完成后配置一下環境變量就 ok
1、在/usr/local/下創建Java文件夾
cd /usr/local/ 進入目錄 mkdir java 新建java目錄
2、文件夾創建完畢,把安裝包拷貝到 Java 目錄中,然后解壓 jdk 到當前目錄
cp /usr/jdk-8u144-linux-x64.tar.gz /usr/local/java/ **注意匹配你自己的文件名** 拷貝到java目錄 tar -zxvf jdk-8u144-linux-x64.tar.gz 解壓到當前目錄(Java目錄)
3、解壓完之后,Java目錄中會出現一個jdk1.8.0_144的目錄,這就解壓完成了。之后配置一下環境變量。
編輯/etc/下的profile文件,配置環境變量
vi /etc/profile 進入profile文件的編輯模式 在最后邊追加一下內容(**配置的時候一定要根據自己的目錄情況而定哦!**) 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
在控制臺輸入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因為后面可能會用到 maven ,先裝上這個。
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 文件,修改關于本地倉庫的位置, 默認位置: ${user.home}/.m2/repository
4、配置環境變量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 虛擬機里面的三臺機器 IP 分別是:
192.168.153.133 192.168.153.134 192.168.153.132配置 hosts
在 /etc/hosts下面編寫:ip node 節點的名字(域名解析)
vim /etc/hosts
新增:
192.168.153.133 es1 192.168.153.134 es2 192.168.153.132 es3設置 SSH 免密碼登錄
安裝expect命令 : yum -y install expect
將 ssh_p2p.jar 隨便解壓到任何目錄下: (這個 jar 包可以去網上下載)
unzip ssh_p2p.zip
修改 resource 的 ip 值
vim /ssh_p2p/deploy_data/resource (各個節點和賬戶名,密碼,free代表相互都可以無密碼登陸)
#設置為你每臺虛擬機的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 的運行權限
chmod u+x start.sh
運行
./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 用戶下 ( 默認不支持 root 用戶)
sh /usr/local/elasticsearch/bin/elasticsearch -d 其中 -d 表示后臺啟動
在 vmware 上測試是否成功:curl http://localhost:9200/
出現如上圖這樣的效果,就代表已經裝好了。
elasticsearch 默認 restful-api 的端口是 9200 不支持 IP 地址,也就是說無法從主機訪問虛擬機中的服務,只能在本機用 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 地址修改為本機外網 IP。然后重啟,Elasticsearch
關閉方法(輸入命令: ps -ef | grep elasticsearch ,找到進程,然后 kill 掉就行了。
如果外網還是不能訪問,則有可能是防火墻設置導致的 ( 關閉防火墻:service iptables stop )
修改配置文件:vim config/elasticsearch.yml
cluster.name : my-app (集群的名字,名字相同的就是一個集群)
node.name : es1 (節點的名字, 和前面配置的 hosts 中的 name 要一致)
path.data: /data/elasticsearch/data (數據的路徑。沒有要創建(mkdir -p /data/elasticsearch/{data,logs}),并且給執行用戶權限 chown tzs /data/elasticsearch/{data,logs} -R )
path.logs: /data/elasticsearch/logs (數據 log 信息的路徑,同上)
network.host: 0.0.0.0 //允許外網訪問,也可以是自己的ip地址
http.port: 9200 //訪問的端口
discovery.zen.ping.unicast.hosts: ["192.168.153.133", "192.168.153.134", "192.168.153.132"] //各個節點的ip地址
記得需要添加上:(這個是安裝 head 插件要用的, 目前不需要)
http.cors.enabled: true
http.cors.allow-origin: "*"
最后在外部瀏覽器的效果如下圖:
安裝 IK 中文分詞可以自己下載源碼使用 maven 編譯,當然如果怕麻煩可以直接下載編譯好的
https://github.com/medcl/elas...
注意下載對應的版本放在 plugins 目錄下
解壓
unzip elasticsearch-analysis-ik-5.5.2.zip
在 es 的 plugins 下新建 ik 目錄
mkdir ik
將剛才解壓的復制到ik目錄下
cp -r elasticsearch/* ik
刪除剛才解壓后的
rm -rf elasticsearch rm -rf elasticsearch-analysis-ik-5.5.2.zipIK 帶有兩個分詞器
ik_max_word :會將文本做最細粒度的拆分;盡可能多的拆分出詞語
ik_smart:會做最粗粒度的拆分;已被分出的詞語將不會再次被其它詞語占有
安裝完 IK 中文分詞器后(當然不止這種中文分詞器,還有其他的,可以參考我的文章 Elasticsearch 默認分詞器和中分分詞器之間的比較及使用方法),測試區別如下:
curl -XGET "http://192.168.153.134:9200/_analyze?pretty&analyzer=ik_max_word" -d "聯想是全球最大的筆記本廠商"
{ "tokens" : [ { "token" : "聯想", "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/_analyze?pretty&analyzer=ik_smart" -d "聯想是全球最大的筆記本廠商"
{ "tokens" : [ { "token" : "聯想", "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 是一個 elasticsearch 的集群管理工具,它是完全由 html5 編寫的獨立網頁程序,你可以通過插件把它集成到 es。
效果如下圖:(圖片來自網絡)
安裝 gityum remove git yum install git git clone git://github.com/mobz/elasticsearch-head.git 拉取 head 插件到本地,或者直接在 GitHub 下載 壓縮包下來安裝nodejs
先去官網下載 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
環境變量設置:
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 文件夾所有者到當前用戶
sudo chown -R noroot:noroot elasticsearch
這是因為 elasticsearch 需要讀寫配置文件,我們需要給予 config 文件夾權限,上面新建了 elsearch 用戶,elsearch 用戶不具備讀寫權限,因此還是會報錯,解決方法是切換到管理員賬戶,賦予權限即可:
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默認是不支持用root用戶來啟動的。
解決方案一:Des.insecure.allow.root=true
修改/usr/local/elasticsearch-2.4.0/bin/elasticsearch,
添加 ES_JAVA_OPTS="-Des.insecure.allow.root=true"
或執行時添加: sh /usr/local/elasticsearch-2.4.0/bin/elasticsearch -d -Des.insecure.allow.root=true
注意:正式環境用root運行可能會有安全風險,不建議用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版本,就不會出現此類問題了。
4、ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
原因:無法創建本地文件問題,用戶最大可創建文件數太小
解決方案:切換到 root 用戶,編輯 limits.conf 配置文件, 添加類似如下內容:
vim /etc/security/limits.conf
添加如下內容:
* 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]
原因:無法創建本地線程問題,用戶最大可創建線程數太小
解決方案:切換到root用戶,進入limits.d目錄下,修改90-nproc.conf 配置文件。
vim /etc/security/limits.d/90-nproc.conf
找到如下內容:
soft nproc 1024
修改為
soft nproc 2048
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:最大虛擬內存太小
root用戶執行命令:
sysctl -w vm.max_map_count=262144
或者修改 /etc/sysctl.conf 文件,添加 “vm.max_map_count”設置
設置后,可以使用
$ 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默認bootstrap.system_call_filter為true進行檢測,所以導致檢測失敗,失敗后直接導致ES不能啟動。
詳見 :https://github.com/elastic/el...
解決方法:在elasticsearch.yml中新增配置bootstrap.system_call_filter,設為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: "*"最后
整個搭建的過程全程自己手動安裝,不易,如果安裝很多臺機器,是否可以寫個腳本之類的自動搭建呢?可以去想想的。首發于:http://www.54tianzhisheng.cn/... ,轉載請注明出處,謝謝配合!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70894.html
摘要:介紹是一個基于的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于接口。是用開發的,并作為許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。本文從零開始,講解如何使用搭建自己的全文搜索引擎。 介紹 ElasticSearch 是一個基于 Lucene 的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch ...
摘要:當時自己在本地測試搭建集群后,給分配了另外一個任務就是去了解中的自帶分詞英文分詞中文分詞的相同與差異以及自己建立分詞需要注意的點。還有就是官網的文檔了,非常非常詳細,還有,版本的是有中文的官方文檔,可以湊合著看。 前提 人工智能、大數據快速發展的今天,對于 TB 甚至 PB 級大數據的快速檢索已然成為剛需,大型企業早已淹沒在系統生成的浩瀚數據流當中。大數據技術業已集中在如何存儲和處理這...
閱讀 821·2023-04-26 00:37
閱讀 706·2021-11-24 09:39
閱讀 2132·2021-11-23 09:51
閱讀 3768·2021-11-22 15:24
閱讀 734·2021-10-19 11:46
閱讀 1868·2019-08-30 13:53
閱讀 2410·2019-08-29 17:28
閱讀 1314·2019-08-29 14:11