介紹
Spring boot整合elastic search 7.9.1實現全文檢索。主要包含以下特性:
- 全文檢索的實現主要包括構建索引、高級搜索、聚集統計、數據建模四個模塊;
- 使用 elasticsearch-rest-high-level-client 來操作elasticsearch,構建索引時,根據實際情況考慮哪些字段需要分詞,哪些不需要分詞,這會影響搜索結果。使用IK分詞器雖然能解決一些中文分詞的問題,但是由于分詞的粒度不夠細,導致很多詞語可能搜不到。例如ik分詞器在構建索引“三國無雙”時,會把“三國”“無雙”存起來建索引,但是搜索“國無”時,搜不出來,因此,我們采用把文本拆分到最細粒度來進行分詞,從而最大限度地搜索到相關結果。詳情參考:如何手動控制分詞粒度提高搜索的準確性
- 高級搜索實現了以下幾種:多字段搜索,指定多個字段進行搜索:query_string,支持高亮顯示經緯度搜索:distanceQuery范圍過濾,對搜索結果進一步按照范圍進行條件過濾:rangeQuery
- 搜索結果的展示提供了普通分頁和滾動分頁兩種實現。普通分頁只適合數據量較小的場景,在數據量非常大的情況下,start+size普通分頁會把全部記錄加載到內存中,這樣做不但運行速度特別慢,而且容易讓es出現內存不足而掛掉。滾動分頁需要得到一個scrollid,以后每次使用scrollid去獲取下一頁的內容,缺點是不能跳頁。
- 聚集統計包含詞條聚集、日期直方圖聚集、范圍聚集,并使用chart.js進行可視化
- 數據建模部分實現了嵌套對象的使用,查詢時無需join性能較好,但是在建索引時就要把關聯數據join好嵌套進去。
- swagger入口:http://localhost:8080/swagger-ui.html
- 新增數據庫數據導入es的工具,編程實現比logstash靈活。使用請切換分支到master。db-import-elastic_search
- 通用的多條件查詢結構模板是布爾查詢,其中must部分放入帶分詞的搜索例如match、querystring等;filter部分放入過濾條件例如term、range等查詢。因為filter部分利用緩存、跳過相關度打分提高性能:
// 通用查詢結構模板
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
構建索引
搜狗日志列表
經緯度搜索
數據統計分析
各國家城市列表
has parent搜索
has child搜索
源代碼地址:Spring-elastic_search: Spring boot整合Elasticsearch實現全文檢索和大數據分析