天天看點

深入淺出 spring-data-elasticsearch - 實戰案例詳解(四)

『  熱烈的愛情到訂婚早已是定點,婚一結一切了結。現在訂了婚,彼此間還留着情感發展的餘地,這是樁好事。- 《我們仨》 』

<b>「系列文章」</b>

<a href="http://spring4all.com/article/25">深入淺出 spring-data-elasticsearch - elasticsearch 架構初探(一)</a>

<a href="http://spring4all.com/article/41">深入淺出 spring-data-elasticsearch - 概述(二)</a>

<a href="">深入淺出 spring-data-elasticsearch - 基本案例詳解(三)</a>

<a href="http://spring4all.com/article/78">深入淺出 spring-data-elasticsearch - 實戰案例詳解(四)</a>

深入淺出 spring-data-elasticsearch - 架構原理以及源碼淺析(五)(拼命編寫ing)

運作環境:jdk 7 或 8,maven 3.0+

技術棧:springboot 1.5+, spring data elasticsearch 1.5+ ,elasticsearch 2.3.2

本文提綱

一、搜尋實戰場景需求

二、運作 spring-data-elasticsearch-query 工程

三、spring-data-elasticsearch-query 工程代碼詳解

搜尋的場景會很多,常用的搜尋場景,需要搜尋的字段很多,但每個字段比對到後所占的權重又不同。比如電商網站的搜尋,搜到商品名稱和商品描述,自然商品名稱的權重遠遠大于商品描述。而且單詞比對肯定不如短語比對。這樣就出現了新的需求,如何确定這些短語,即自然分詞。那就利用分詞器,即可得到所需要的短語,然後進行搜尋。

下面介紹短語如何進行按權重分比對搜尋。

1. 背景起守護線程啟動 elasticsearch

下面開始運作工程步驟(quick start):

2. 項目結構介紹

本地啟動的 es ,就不需要改配置檔案了。如果連測試 es 服務位址,需要修改相應配置

3.編譯工程

在項目根目錄 spring-data-elasticsearch-query,運作 maven 指令:

4.運作工程

右鍵運作 application 應用啟動類(位置:org/spring/springboot/application.java)的 main 函數,這樣就成功啟動了 spring-data-elasticsearch-query 案例。

用 postman 工具新增兩個城市

a. 新增城市資訊

下面是實戰搜尋語句的接口:

擷取傳回結果:

傳回 json 如下:

應用的控制台中,日志列印出查詢語句的 dsl :

三、spring-data-elasticsearch-query 工程代碼詳解

1.pom.xml 依賴

2. application.properties 配置 es 位址

預設 9300 是 java 用戶端的端口。9200 是支援 restful http 的接口。

更多配置:

 spring.data.elasticsearch.cluster-name elasticsearch    叢集名。(預設值: elasticsearch)

 spring.data.elasticsearch.cluster-nodes    叢集節點位址清單,用逗号分隔。如果沒有指定,就啟動一個用戶端節點。

 spring.data.elasticsearch.propertie     用來配置用戶端的額外屬性。

 spring.data.elasticsearch.repositories.enabled     開啟 elasticsearch 倉庫。(預設值:true。)

3. es 資料操作層

接口隻要繼承 elasticsearchrepository 接口類即可,具體使用的是該接口的方法:

4. 實體類

注意

a. city 屬性名不支援駝峰式。

b. indexname 配置必須是全部小寫,不然會出異常。

org.elasticsearch.indices.invalidindexnameexception: invalid index name [provinceindex], must be lowercase

5. 城市 es 業務邏輯實作類

代碼如下:

可以看到該過程實作了,短語精準比對以及比對到根據字段權重分求和,進而實作按權重搜尋查詢。代碼流程如下:

- 權重分查詢

- 短語比對

- 設定權重分最小值

- 設定分頁參數

注意:

- 字段對應權重分設定,可以優化成 enum

- 由于無相關性的分值預設為 1 ,設定權重分最小值為 10

四、小結

elasticsearch 還提供很多進階的搜尋功能。這裡提供下需要經常逛的相關網站:

摘要: 原創出處 www.bysocket.com 「泥瓦匠bysocket 」歡迎轉載,保留摘要,謝謝!