1. 程式人生 > >搜尋框架搭建1:elasticsearch安裝和視覺化工具kibana、分詞外掛jieba安裝

搜尋框架搭建1:elasticsearch安裝和視覺化工具kibana、分詞外掛jieba安裝

elasticsearch安裝和視覺化工具kibana、分詞外掛jieba安裝

Elasticsearch前身為Lucene,是一個分散式可擴充套件的實時搜尋和分析引擎。

為了更好地使用Elasticsearch,會安裝相應的工具或外掛,如視覺化工具kibana,分詞外掛jieba。windows環境和Linux環境下安裝elasticsearch和外掛、工具略有差異。

相關資源下載連結
elasticsearch下載: https://www.elastic.co/downloads/past-releases/


kibana視覺化工具下載: https://www.elastic.co/cn/downloads/kibana, 歷史版本:https://www.elastic.co/downloads/past-releases
jieba分詞外掛下載: https://github.com/sing1ee/elasticsearch-jieba-plugin/releases
java下載: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
gradle工具下載: http://services.gradle.org/distributions/

1 Windosw環境

1.1 java環境安裝

Elasticsearch 需要 Java 8 環境。如果機器沒有java8環境,則首先需要安裝java8。

  • 第一步:下載對應的java版本,一路next,記住java8安裝的路徑,一般是C:\Program Files\Java\jre1.8.0_181

  • 第二步:新增JAVA路徑。在環境變數中,新增變數JAVA_HOME,值設為java的安裝路徑C:\Program Files\Java\jre1.8.0_181。windows修改環境變數,需要重啟電腦生效。

在命令列視窗輸入java -version,若顯示如下結果,則表示安裝成功。或顯示java路徑,echo %JAVA_HOME%,與在環境變數中新增的JAVA_HOME值相同,則也表示安裝成功

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

1.2 elasticsearch安裝

  • 第一步:下載某個版本的elasticsearch,解壓到某個路徑。

  • 第二步:修改./config/elasticsearch.yml配置檔案
    (1) 修改network.host: 0.0.0.0,0.0.0.0表示所有網址都能訪問
    (2) 修改http.port: 9200,設定訪問埠,如果9200埠被佔用了,則用另外的埠。
    (3) 可設定當前es的cluster.name和node.name的值。
    注意:在修改配置檔案時,所有生效項緊跟的冒號後面,需要有一個英文字元的空格;所有生效項所在行的第一個字元為空格,否則es啟動時讀取配置檔案將無法正確解析。

  • 第三步:測試es是否生效
    (1) 從命令列視窗進入es所在目錄,輸入bin\elasticsearch.bat,則啟動了es
    (2) 在瀏覽器網頁中輸入http://localhost:9200,當返回一個JSON物件,包含當前節點、叢集版本等資訊,則表示elasticsearch配置成功,如下圖所示

{
  "name" : "node-1",
  "cluster_name" : "es-GuoTing-application",
  "cluster_uuid" : "j6um5uZlSmygvi-pq897dA",
  "version" : {
    "number" : "6.4.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "595516e",
    "build_date" : "2018-08-17T23:18:47.308994Z",
    "build_snapshot" : false,
    "lucene_version" : "7.4.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

1.3 視覺化介面kibana安裝

下載某個版本的kibana,解壓到某個路徑即可。

測試kibana是否生效需以下幾步:
(1) 啟動es
(2) 啟動kibana,在命令列視窗進入kibana路徑,輸入語句bin\kibana.bat即後臺啟動完成
(3) 在瀏覽器中輸入http://localhost:5601,可成功訪問即可,頁面類似如下
kibana視覺化介面

1.4 中文分詞jieba外掛安裝

elasticsearch自帶分詞外掛,但中文分詞效果很差。一些中文分詞外掛被開發出來提升es的分詞效果,如ik,jieba,ik作為外國友人開發的外掛,效果不如jieba。

1.4.1 gradle安裝

在編譯jieba得到可用的jieba分詞外掛時,需用到gradle這個工具。如果機器上沒有gradle這個工具,則需先安裝此工具。

  • 第一步:下載某版本的gradle工具後,解壓到某路徑。

  • 第二步:新增gradle路徑。在環境變數中,新增變數GRADLE_HOME,值設為gradle的路徑。例如D:\gradle-4.10.2,並在Path中新增gradle的bin的路徑,例如D:\gradle-4.10.2\bin。windows修改環境變數,需要重啟電腦生效。

在命令列視窗輸入gradle -version,若顯示如下結果,則表示安裝成功。

D:\>gradle -version

------------------------------------------------------------
Gradle 4.10.2
------------------------------------------------------------

Build time:   2018-09-19 18:10:15 UTC
Revision:     b4d8d5d170bb4ba516e88d7fe5647e2323d791dd

Kotlin DSL:   1.0-rc-6
Kotlin:       1.2.61
Groovy:       2.4.15
Ant:          Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM:          1.8.0_181 (Oracle Corporation 25.181-b13)
OS:           Windows 10 10.0 amd64

1.4.2 jieba外掛安裝

下載和es版本相對應版本的jieba分詞外掛,解壓到某路徑後,用gradle編譯後才可得到可用的外掛。步驟如下

  • 第一步:從命令列視窗進入jieba分詞外掛解壓路徑,執行gradle pz。編譯成功,將會在./build/distributions/目錄下生成一個壓縮包。

  • 第二步:將壓縮包解壓,拷貝到${elasticsearch_home}/plugins路徑下,可刪除壓縮包檔案。

驗證jieba分詞是否安裝成功,可從瀏覽器或視覺化介面兩種方法。不管哪種方法,首先需重啟es。
(1) 瀏覽器驗證
在瀏覽器中輸入http://localhost:9200/_analyze?analyzer=jieba_index&pretty=true&text=輸入要分詞的句子,瀏覽器返回分詞後的結果,則說明jieba分詞安裝成功。

也可能返回如下的json檔案,這時候不一定說明jieba分詞外掛沒有成功安裝,有可能是es的http的介面問題,可用視覺化介面的方法確認是否未成功。
出現這種問題的解決方法目前還沒找到。

{
  "error" : {
    "root_cause" : [
      {
        "type" : "parse_exception",
        "reason" : "request body or source parameter is required"
      }
    ],
    "type" : "parse_exception",
    "reason" : "request body or source parameter is required"
  },
  "status" : 400
}

(2) 視覺化介面驗證
啟動kibana,在DevTools介面下輸入

POST /_analyze/?pretty
{
  "analyzer": "jieba_search",
  "text": "我愛北京天安門"
}

出現如下介面表示是通過jieba外掛進行分詞的。

{
  "tokens": [
    {
      "token": "我愛",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 0
    },
    {
      "token": "北京",
      "start_offset": 2,
      "end_offset": 4,
      "type": "word",
      "position": 1
    },
    {
      "token": "天安門",
      "start_offset": 4,
      "end_offset": 7,
      "type": "word",
      "position": 2
    }
  ]
}

es中,analyzer表示分詞使用的方法,當使用結巴分詞時,可以是jieba_index: 用於索引分詞,分詞力度較細;jieba_search:用於查詢分詞,分詞力度較粗;jieba_others: 全形轉半形、大寫轉小寫、字元分詞。

jieba有三種分詞模式,
(1) 精確模式,試圖將句子最精確地切開,適合文字分析;
(2) 搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞;
(3) 全模式,把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但不能解決歧義問題。

2 Linux環境

Linux環境下安裝elasticsearch和相關的工具、外掛,和windows下大同小異。

2.1 java安裝

  • 第一步:下載對應的java版本,解壓到某路徑。

  • 第二步:新增JAVA路徑。通過修改/etc/profile檔案,在檔案末尾添以下語句,並通過語句source /etc/profile使修改生效。

JAVA_HOME=/home/appuser/envs/jdk1.8.0_171 #java的路徑
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH export CLASSPATH

在命令列中輸入java -version,若返回正確的java版本資訊,則java安裝成功。

2.2 elasticsearch安裝

Linux下elasticsearch的安裝和windows下基本一致。
先下載解壓
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.0.zip
unzip elasticsearch-6.2.0.zip
再修改./config/elasticsearch.yml配置檔案,最後測試是否安裝成功時與windows略有差異。啟動es時,先進入到es路徑,再通過./bin/elasticsearch啟動。在瀏覽器網頁中輸入http://localhost:9200,當返回一個正確的JSON物件,包含當前節點、叢集版本等資訊,則安裝成功。若是伺服器,則瀏覽器輸入內容中localhost換成伺服器ip地址,例如http://10.90.234.118:9200

2.3 視覺化介面kibana安裝

下載某個版本的kibana,解壓到某個路徑即可。

測試kibana是否生效需以下幾步:
(1) 啟動es
(2) 啟動kibana,在命令列視窗進入kibana路徑,輸入語句./bin/kibana即後臺啟動完成
(3) 在瀏覽器中輸入http://localhost:5601,可成功訪問即可,若是伺服器,則把localhost換成伺服器ip地址。

2.4 中文分詞jieba外掛安裝

類似windows環境下Jieba外掛的安裝。

2.4.1 gradle安裝

  • 第一步:下載某版本的gradle工具後,解壓到某路徑。

  • 第二步:新增gradle路徑。通過修改/etc/profile檔案,在檔案末尾添以下語句,並通過語句source /etc/profile使修改生效。

export GRADLE_HOME=/usr/local/gradle-5.0 #gradle 路徑
export PATH=$GRADLE_HOME/bin:$PATH
export GRADLE_USER_HOME=$GRADLE_HOME/.gradle #gradle的配置檔案位置,該目錄下的init.gradle指定了遠端庫路徑

在命令列視窗輸入gradle -version,若顯示正確的gradle版本資訊,則表示安裝成功。

在使用gradle pz編譯jieba外掛時,從國外映象下載相關資源一般會失敗,需要新增國內的阿里雲映象。

對單個專案生效,則修改該專案路徑下的build.gradle的內容,修改對應buildscript和allprojects項的內容如下

buildscript {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
    }
    dependencies {#建議註釋該項內容,在使用gradle pz時易報錯
        classpath 'com.android.tools.build:gradle:2.2.3' 
    }        
}

allprojects {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
    }
}

修改完後,在使用語句gradle pz在Linux環境下編譯jieba外掛時一般不會報錯。接下來就可以進入到編譯jieba外掛階段。
而本人在伺服器上編譯時遇到如下問題,懷疑是和網路連線限制的相關問題。網上很少資料涉及到這個問題,做了基本能做的嘗試,都沒法解決此問題,如果有人遇到類似問題也解決了,請不要吝嗇來告訴我方法吧。

FAILUER: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
   > Could not resolve com.huaban:jieba-analysis:1.0.2.
     Required by:
         project :
      > Could not resolve com.huaban:jieba-analysis:1.0.2.
         > Could not get resource 'http://maven.aliyun.com/nexus/content/groups/public/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom'.
            > Could not GET 'http://maven.aliyun.com/nexus/content/groups/public/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom'.
               > maven.aliyun.com
      > Could not resolve com.huaban:jieba-analysis:1.0.2.
         > Could not get resource 'https://jcenter.bintray.com/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom'.
            > Could not GET 'https://jcenter.bintray.com/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom'.
               > jcenter.bintray.com
   > Could not resolve org.elasticsearch:elasticsearch:6.4.0.
     Required by:
         project :
      > Could not resolve org.elasticsearch:elasticsearch:6.4.0.
         > Could not get resource 'http://maven.aliyun.com/nexus/content/groups/public/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom'.
            > Could not GET 'http://maven.aliyun.com/nexus/content/groups/public/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom'.
               > maven.aliyun.com
         > Could not resolve org.elasticsearch:elasticsearch:6.4.0.
         > Could not get resource 'https://jcenter.bintray.com/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom'.
            > Could not GET 'https://jcenter.bintray.com/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom'.
               > jcenter.bintray.com
   > Could not resolve org.apache.logging.log4j:log4j-api:2.7.
     Required by:
         project :
      > Could not resolve org.apache.logging.log4j:log4j-api:2.7.
         > Could not get resource 'http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom'.
            > Could not GET 'http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom'.
               > maven.aliyun.com
      > Could not resolve org.apache.logging.log4j:log4j-api:2.7.
         > Could not get resource 'https://jcenter.bintray.com/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom'.
            > Could not GET 'https://jcenter.bintray.com/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom'.
               > jcenter.bintray.com
   > Could not resolve org.apache.logging.log4j:log4j-core:2.7.
     Required by:
         project :
      > Could not resolve org.apache.logging.log4j:log4j-core:2.7.
         > Could not get resource 'http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom'.
            > Could not GET 'http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom'.
               > maven.aliyun.com
      > Could not resolve org.apache.logging.log4j:log4j-core:2.7.
         > Could not get resource 'https://jcenter.bintray.com/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom'.
            > Could not GET 'https://jcenter.bintray.com/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom'.
               > jcenter.bintray.com

2.4.2 jieba外掛安裝

和windows環境下幾乎相同。

下載和es版本相同版本的jieba分詞外掛,解壓,執行gradle pz
在執行gradle pz時可能會提示沒有操作許可權,則需檢視當前資料夾是否可執行,可用chmod -R 777 .修改當前使用者對整個資料夾的操作許可權。

編譯成功,在./build/distributions/目錄下生成一個壓縮包,拷貝到${elasticsearch_home}/plugins路徑下並解壓,可刪除壓縮包檔案。

驗證jieba分詞是否安裝成功同windows環境。略微差異在於,如果是伺服器,在區域網的其它機器的瀏覽器輸入內容時,localhost替換成瀏覽器的ip地址,如http://10.90.234.118:9200/_analyze?analyzer=jieba_index&pretty=true&text=輸入要分詞的句子。

經過以上步驟,基本上ES和相關的外掛、工具都安裝完成,可以使用ES進行開發了。