『 熱烈的愛情到訂婚早已是定點,婚一結一切了結。現在訂了婚,彼此間還留着情感發展的餘地,這是樁好事。- 《我們仨》 』
<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 」歡迎轉載,保留摘要,謝謝!