1. 程式人生 > >ElasticSearch6.5.0 【安裝IK分詞器】

ElasticSearch6.5.0 【安裝IK分詞器】

不得不誇獎一下ES的周邊資源,比如這個IK分詞器,緊跟ES的版本,盧本偉牛逼!另外ES更新太快了吧,幾乎不到半個月一個小版本就釋出了!!目前已經發了6.5.2,估計我還沒怎麼玩就到7.0了。

下載

分詞器:GitHub

點選release,下載對應的版本,他這個跟ES是一一對應的。

安裝

他這個安裝非常容易!業界良心啊!!

第一步:在elasticsearch-6.5.0主目錄下的plugins目錄新建一個ik資料夾

第二步:把從GitHub下載下來的壓縮包解壓到這個資料夾

啟動

 進入ES主目錄

[E:\elasticsearch-6.5.0]$ .\bin\elasticsearch.bat

準備資料

依賴:

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId
>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <version>2.11.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</
artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>6.5.0</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.5.0</version> </dependency>

程式碼:

    /**
     * 建立索引
     * @return
     * @throws IOException
     */
    public static RestHighLevelClient createIndexForIk() throws IOException {
        RestHighLevelClient client = RestClientFactory.getInstance().getClient();
        CreateIndexRequest request = new CreateIndexRequest("test_ik_index");
        request.settings(Settings.builder()
                .put("index.number_of_shards", 1)
                .put("index.number_of_replicas", 1))
                // 設定mapping
                .mapping("social", "content1","type=text", "content2", "type=text,analyzer=ik_smart","content3", "type=text,analyzer=ik_max_word")
                // 建立超時
                .timeout(TimeValue.timeValueMinutes(2))
                // 連線到主節點超時時間
                .masterNodeTimeout(TimeValue.timeValueMinutes(1));
        CreateIndexResponse indexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        boolean acknowledged = indexResponse.isAcknowledged();
        boolean shardsAcknowledged = indexResponse.isShardsAcknowledged();
        System.out.println(acknowledged + "," + shardsAcknowledged);
        return client;
    }

    /**
     * 準備資料
     * @return
     * @throws IOException
     */
    public static RestHighLevelClient bulkAddForIk() throws IOException {
        RestHighLevelClient client = RestClientFactory.getInstance().getClient();
        BulkRequest request = new BulkRequest();
        request.add(new IndexRequest("test_ik_index", "social", "1")
                .source(XContentType.JSON,"content1", "富強、民主、文明、和諧,自由、平等、公正、法治,愛國、敬業、誠信、友善",
                        "content2", "“富強、民主、文明、和諧”,是我國社會主義現代化國家的建設目標,也是從價值目標層面對社會主義核心價值觀基本理念的凝練,在社會主義核心價值觀中居於最高層次,對其他層次的價值理念具有統領作用",
                        "content3", "富強、民主、文明、和諧,自由、平等、公正、法治,愛國、敬業、誠信、友善"));
        request.add(new IndexRequest("test_ik_index", "social", "2")
                .source(XContentType.JSON,"content1", "以熱愛祖國為榮,以危害祖國為恥",
                        "content2", "1978年12月,黨的十一屆三中全會重新恢復和確立了實事求是的思想路線,堅持把馬克思主義與改革開放和我國社會主義建設偉大實踐相結合,科學繼承了***思想,創立了鄧小平理論、“三個代表”重要思想、科學發展觀等馬克思主義中國化最新成果,馬克思主義在意識形態領域的指導地位不斷鞏固",
                        "content3", "“自由、平等、公正、法治”,是對美好社會的生動表述,也是從社會層面對社會主義核心價值觀基本理念的凝練"));
        request.add(new IndexRequest("test_ik_index", "social", "3")
                .source(XContentType.JSON,"content1", "以服務人民為榮,以背離人民為恥",
                        "content2", "新中國的建立,確立了以社會主義基本政治制度、基本經濟制度的確立和以馬克思主義為指導思想的社會主義意識形態,為社會主義核心價值體系建設奠定了政治前提、物質基礎和文化條件",
                        "content3", "“愛國、敬業、誠信、友善”,是公民基本道德規範,是從個人行為層面對社會主義核心價值觀基本理念的凝練"));
        BulkResponse bulk = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println("Status:" + bulk.status().name() + ",hasFailures:" + bulk.hasFailures());
        MultiGetRequest multiGetRequest = new MultiGetRequest()
                .add(new MultiGetRequest.Item("test_ik_index", "social", "1"))
                .add(new MultiGetRequest.Item("test_ik_index", "social", "2"))
                .add(new MultiGetRequest.Item("test_ik_index", "social", "3"));
        MultiGetResponse response = client.mget(multiGetRequest, RequestOptions.DEFAULT);
        MultiGetItemResponse[] itemResponses = response.getResponses();
        for(MultiGetItemResponse r : itemResponses){
            System.out.println(r.getResponse().getSourceAsString());
        }
        return client;
    }

執行

    public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
        createIndexForIk().close();
        bulkAddForIk().close();
    }

我有三個欄位:content1--用的預設分詞器;content2:用的ik_smart;content3:用的ik_max_word

測試(在Kibana控制檯裡)

 第一個查詢:(可見預設的沒有正確分詞,看highlight欄位

GET /test_ik_index/_search
{
    "query" : {
        "match": { "content1": "中國" }
    },
    "highlight" : {
        "pre_tags" : ["<tag1>"],
        "post_tags" : ["</tag1>"],
        "fields" : {
            "content1": {}
        }
    }
}

-------------------------------
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.68320733,
    "hits" : [
      {
        "_index" : "test_ik_index",
        "_type" : "social",
        "_id" : "2",
        "_score" : 0.68320733,
        "_source" : {
          "content1" : "以熱愛祖國為榮,以危害祖國為恥",
          "content2" : "1978年12月,黨的十一屆三中全會重新恢復和確立了實事求是的思想路線,堅持把馬克思主義與改革開放和我國社會主義建設偉大實踐相結合,科學繼承了***思想,創立了鄧小平理論、“三個代表”重要思想、科學發展觀等馬克思主義中國化最新成果,馬克思主義在意識形態領域的指導地位不斷鞏固",
          "content3" : "“自由、平等、公正、法治”,是對美好社會的生動表述,也是從社會層面對社會主義核心價值觀基本理念的凝練"
        },
        "highlight" : {
          "content1" : [
            "以熱愛祖<tag1>國</tag1>為榮,以危害祖<tag1>國</tag1>為恥"
          ]
        }
      },
      {
        "_index" : "test_ik_index",
        "_type" : "social",
        "_id" : "1",
        "_score" : 0.40610588,
        "_source" : {
          "content1" : "富強、民主、文明、和諧,自由、平等、公正、法治,愛國、敬業、誠信、友善",
          "content2" : "“富強、民主、文明、和諧”,是我國社會主義現代化國家的建設目標,也是從價值目標層面對社會主義核心價值觀基本理念的凝練,在社會主義核心價值觀中居於最高層次,對其他層次的價值理念具有統領作用",
          "content3" : "富強、民主、文明、和諧,自由、平等、公正、法治,愛國、敬業、誠信、友善"
        },
        "highlight" : {
          "content1" : [
            "富強、民主、文明、和諧,自由、平等、公正、法治,愛<tag1>國</tag1>、敬業、誠信、友善"
          ]
        }
      }
    ]
  }
}

第二個:(ok)

GET /test_ik_index/_search
{
    "query" : {
        "match": { "content2": "馬克思主義" }
    },
    "highlight" : {
        "pre_tags" : ["<tag1>"],
        "post_tags" : ["</tag1>"],
        "fields" : {
            "content2": {}
        }
    }
}

-------------------------------
{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.71390307,
    "hits" : [
      {
        "_index" : "test_ik_index",
        "_type" : "social",
        "_id" : "2",
        "_score" : 0.71390307,
        "_source" : {
          "content1" : "以熱愛祖國為榮,以危害祖國為恥",
          "content2" : "1978年12月,黨的十一屆三中全會重新恢復和確立了實事求是的思想路線,堅持把馬克思主義與改革開放和我國社會主義建設偉大實踐相結合,科學繼承了***思想,創立了鄧小平理論、“三個代表”重要思想、科學發展觀等馬克思主義中國化最新成果,馬克思主義在意識形態領域的指導地位不斷鞏固",
          "content3" : "“自由、平等、公正、法治”,是對美好社會的生動表述,也是從社會層面對社會主義核心價值觀基本理念的凝練"
        },
        "highlight" : {
          "content2" : [
            "1978年12月,黨的十一屆三中全會重新恢復和確立了實事求是的思想路線,堅持把<tag1>馬克思主義</tag1>與改革開放和我國社會主義建設偉大實踐相結合,科學繼承了***思想,創立了鄧小平理論、“三個代表”重要思想、科學發展觀等<tag1>馬克思主義</tag1>中國化最新成果",
            ",<tag1>馬克思主義</tag1>在意識形態領域的指導地位不斷鞏固"
          ]
        }
      },
      {
        "_index" : "test_ik_index",
        "_type" : "social",
        "_id" : "3",
        "_score" : 0.50678647,
        "_source" : {
          "content1" : "以服務人民為榮,以背離人民為恥",
          "content2" : "新中國的建立,確立了以社會主義基本政治制度、基本經濟制度的確立和以馬克思主義為指導思想的社會主義意識形態,為社會主義核心價值體系建設奠定了政治前提、物質基礎和文化條件",
          "content3" : "“愛國、敬業、誠信、友善”,是公民基本道德規範,是從個人行為層面對社會主義核心價值觀基本理念的凝練"
        },
        "highlight" : {
          "content2" : [
            "新中國的建立,確立了以社會主義基本政治制度、基本經濟制度的確立和以<tag1>馬克思主義</tag1>為指導思想的社會主義意識形態,為社會主義核心價值體系建設奠定了政治前提、物質基礎和文化條件"
          ]
        }
      }
    ]
  }
}

第三個:(ok)

GET /test_ik_index/_search
{
    "query" : {
        "match": { "content3": "富強" }
    },
    "highlight" : {
        "pre_tags" : ["<tag1>"],
        "post_tags" : ["</tag1>"],
        "fields" : {
            "content3" : {}
        }
    }
}

-----------------------------------
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.2146692,
    "hits" : [
      {
        "_index" : "test_ik_index",
        "_type" : "social",
        "_id" : "1",
        "_score" : 1.2146692,
        "_source" : {
          "content1" : "富強、民主、文明、和諧,自由、平等、公正、法治,愛國、敬業、誠信、友善",
          "content2" : "“富強、民主、文明、和諧”,是我國社會主義現代化國家的建設目標,也是從價值目標層面對社會主義核心價值觀基本理念的凝練,在社會主義核心價值觀中居於最高層次,對其他層次的價值理念具有統領作用",
          "content3" : "富強、民主、文明、和諧,自由、平等、公正、法治,愛國、敬業、誠信、友善"
        },
        "highlight" : {
          "content3" : [
            "<tag1>富強</tag1>、民主、文明、和諧,自由、平等、公正、法治,愛國、敬業、誠信、友善"
          ]
        }
      }
    ]
  }
}

 

 到此為止,分詞器安裝完畢

 

 小插曲:文字有***不讓釋出。。。。