ES Client

关于 ElasticSearch的学习参见:ELK | wjcx_sqh
本文分别学习 .Net | Java 下操作 ES:

.Net

目前主流的 .Net 客户端有 2 种:

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

PlainElastic.Net 简单了解即可,具体参见:https://www.cnblogs.com/eggTwo/p/4039779.html

Elasticsearch.Net + Nest

直接在 Nuget | 官网 下载对应的 .nuget包,在项目中引入即可。

注意不同版本 .dll 对 .Net Framework 框架的依赖。

查询

  • 对象方式查询
  • Fluent API

TermQuery 是整词搜索;MatchQuery 是按分词器分词搜索,可以搭配 from 和 size 从指定位置返回指定条数。
注意 match 与 match_phrase 的不同。

Search After
通过上一页的结果检索下一页,使用search_after参数时,from的值必须设为0或-1:search_after

  • from和size:深度分页或size特别大时,会出deep pagination,es自保机制max_result_window预设值10000,建议from + size <= 1万
  • scroll:代表某时刻的snapshot,不适合实时查询,scroll后接超时时间,频繁发起scroll请求,也会出现一系列问题

search_after解决scroll的非实时取值问题,提供live cursor规避消耗存储和时间的性能问题:search_after性能

索引

ES的mapping一旦创建不能再次修改,需删除再重新创建

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 的版本匹配,对应关系
参考教程

转载于:https://www.cnblogs.com/wjcx-sqh/p/11294683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值