ES Client

關於 ElasticSearch的學習參見:ELK | wjcx_sqh
本文分別學習 .Net | Java 下操做 ES:html

.Net

目前主流的 .Net 客戶端有 2 種:java

  • PlainElastic.Net
  • Elasticsearch.Net.dll 和 Nest.dll

PlainElastic.Net 簡單瞭解便可,具體參見:http://www.javashuo.com/article/p-ccxdflrg-mk.htmlgit

Elasticsearch.Net + Nest

直接在 Nuget | 官網 下載對應的 .nuget包,在項目中引入便可。github

注意不一樣版本 .dll 對 .Net Framework 框架的依賴。spring

查詢

  • 對象方式查詢
  • Fluent API

TermQuery 是整詞搜索;MatchQuery 是按分詞器分詞搜索,能夠搭配 from 和 size 從指定位置返回指定條數。
注意 match 與 match_phrase 的不一樣。json

Search After
經過上一頁的結果檢索下一頁,使用search_after參數時,from的值必須設爲0或-1:search_afterapi

  • from和size:深度分頁或size特別大時,會出deep pagination,es自保機制max_result_window預設值10000,建議from + size <= 1萬
  • scroll:表明某時刻的snapshot,不適合實時查詢,scroll後接超時時間,頻繁發起scroll請求,也會出現一系列問題

search_after解決scroll的非實時取值問題,提供live cursor規避消耗存儲和時間的性能問題:search_after性能springboot

索引

ES的mapping一旦建立不能再次修改,需刪除再從新建立app

client.Indices.Create(index_name, 
    c => c.Map<MyClassObj>(h => h.AutoMap().Properties(
    ps => ps.Text(s => s.Name(n => n.OneFieldInMyClassObj)
    .Analyzer("ik_max_word").SearchAnalyzer("ik_smart"))
)));

問題解決

問題1:Kibana顯示的時間比實際插入ES的時間多8個小時
緣由:NEST的序列化器默認DateTime類型是UTC時區,序列化時丟棄了時區信息,而Kibana設置是東八區
解決:建立client時傳入設置參數框架

var settings = new ConnectionSettings(pool, 
    sourceSerializer: (builtin, setting) => new JsonNetSerializer(builtin, setting, 
        () => new Newtonsoft.Json.JsonSerializerSettings { 
            DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local 
}));

問題2:實現超時自動重試
解決:經過添加max_retries和retry_on_timeout兩個參數

es = Elasticsearch( hosts=[{'host': 'localhost', 'port': 9200}], timeout=60, max_retries=3, retry_on_timeout=True);

序列化

ElasticSearch 是 Restful 相關,天然常常用到 json
推薦學習:Custom Serialization

Java

原生APi

SpringBoot + Elasticsearch

SpringBoot 集成 Elasticsearch,支持 4 種方式

  • REST Client
  • Jest
  • Spring Data
  • Spring Data Elasticsearch Repositories

Spring Data Elasticsearch

Spring Data 子模塊套件,支持快速初始化maven項,官網移步

  • SpringBoot:v
  • Elasticsearch:v6.8.0

務必保證 SpringBoot 和 Elasticsearch 的版本匹配,對應關係
參考教程

相關文章
相關標籤/搜索