关于 ElasticSearch的学习参见:ELK | wjcx_sqh
本文分别学习 .Net | Java 下操做 ES:html
目前主流的 .Net 客户端有 2 种:java
PlainElastic.Net 简单了解便可,具体参见:http://www.javashuo.com/article/p-ccxdflrg-mk.htmlgit
直接在 Nuget | 官网 下载对应的 .nuget包,在项目中引入便可。github
注意不一样版本 .dll 对 .Net Framework 框架的依赖。spring
TermQuery 是整词搜索;MatchQuery 是按分词器分词搜索,能够搭配 from 和 size 从指定位置返回指定条数。
注意 match 与 match_phrase 的不一样。json
Search After
经过上一页的结果检索下一页,使用search_after参数时,from的值必须设为0或-1:search_afterapi
from + size <= 1万
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
SpringBoot 集成 Elasticsearch,支持 4 种方式
Spring Data 子模块套件,支持快速初始化maven项,官网移步