1.IndexExists检测索引是否存在,更简洁了,可以这样

_ElasticClient.IndexExists(indices : indexName).Exists

2.索引数据的时候,如果数据是个字符串json,那么索引后查看数据是有问题的,索引的数据需要是个Model对象,此情况是个人遇到的,不确定是否有其他操作方法

3.如果索引数据是做了路由处理的话,那么使用Id搜索或者删除也必须加上路由信息,不然会404找不到的,此情况只针对Id搜索或删除

_ElasticClient.Get(new DocumentPath<T>(esId), s => s.Type(_EsType).Routing(routing))

_ElasticClient.DeleteAsync(new DeleteRequest(_ElasticClient.ConnectionSettings.DefaultIndex, _EsType, esId) { Routing = routing });

4.es.dll 6.x的使用虽然摆脱了Newtonsoft.Json的依赖,但也出现一些新的问题,序列化会和Newtonsoft不太一样,导致老项目无法直接使用,比如c# Model中的属性“Name”标记了jsonproperty["nm"],但6.x中索引的数据并没有使用nm,依然是Name,这就是6.x中自带序列化的问题。对于这个情况,6.x其实提供了一个接口IElasticsearchSerializer,只需要去实现并且使用即可,使用方法如下

var _ConnectionPool = new StaticConnectionPool(uris);
var _ConnectionConfig = new ConnectionSettings(_ConnectionPool, sourceSerializer: (builtin, settingss) => new JsonNetSerializer());
var _ElasticClient = new ElasticClient(_ConnectionConfig.DefaultIndex("IndexName").DefaultFieldNameInferrer((name) => name));

 JsonNetSerializer 是新建的实现类,继承IElasticsearchSerializer,实现如下

public class JsonNetSerializer : IElasticsearchSerializer
{
private static JsonSerializer serializer = JsonSerializer.CreateDefault();
private static JsonSerializer indentedSerializer =
JsonSerializer.CreateDefault(new JsonSerializerSettings
{
Formatting = Newtonsoft.Json.Formatting.Indented
}); public object Deserialize(Type type, Stream stream)
{
var streamReader = new StreamReader(stream);
var reader = new JsonTextReader(streamReader);
return serializer.Deserialize(reader, type);
} public T Deserialize<T>(Stream stream)
{
return (T)Deserialize(typeof(T), stream);
} public Task<object> DeserializeAsync(Type type, Stream stream, CancellationToken cancellationToken = default(CancellationToken))
{
var o = Deserialize(type, stream);
return Task.FromResult(o);
} public Task<T> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken = default(CancellationToken))
{
var o = Deserialize<T>(stream);
return Task.FromResult(o);
} public void Serialize<T>(T data, Stream stream, SerializationFormatting formatting = SerializationFormatting.Indented)
{
var writer = new StreamWriter(stream);
if (formatting == SerializationFormatting.Indented)
indentedSerializer.Serialize(writer, data, typeof(T));
else
serializer.Serialize(writer, data, typeof(T)); writer.Flush();
} public Task SerializeAsync<T>(T data, Stream stream, SerializationFormatting formatting = SerializationFormatting.Indented, CancellationToken cancellationToken = default(CancellationToken))
{
Serialize(data, stream, formatting);
return Task.CompletedTask;
}
}

ElasticSearch 2.X升级到6.X遇到的几个问题的更多相关文章

  1. Elasticsearch集群升级指引

    目录 背景 第一部分 版本升级指引 第二部分 升级方法和具体步骤 总结 参考文献及资料 背景 Elasticsearch集群的版本升级是一项重要的集群维护工作.本篇文章参考官方文档,将详细介绍相关细节 ...

  2. Elasticsearch1.7到2.3升级实践总结

    概括 简述 升级分为Elasticsearch server升级和Elasticsearch client api升级 为什么要迁移 当前团队内多个业务方公用一套ES集群,容易被影响,重要业务应该独自 ...

  3. Elasticsearch和Kibana安装

    Elasticsearch安装 Elasticsearch至少需要Java 8.在撰写本文时,建议你使用Oracle JDK版本1.8.0_131.Java安装因平台而异,所以在这里不再赘述.Orac ...

  4. 使用Java High Level REST Client操作elasticsearch

    Java高级别REST客户端(The Java High Level REST Client)以后简称高级客户端,内部仍然是基于低级客户端.它提供了更多的API,接受请求对象作为参数并返回响应对象,由 ...

  5. Elasticsearch 学习总结 - 相关配置补充说明

    一.   Elasticsearch的基本概念 term索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...

  6. Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述

    目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...

  7. ElasticSearch 安装, 带视频

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 疯狂创客圈 高并 ...

  8. Elasticsearch详解-续

    Elasticsearch详解-续 Chandler_珏瑜  关注  7.6 2019.05.22 10:46* 字数 8366 阅读 675评论 4喜欢 25 5.3 性能调优  Elasticse ...

  9. 30分钟全方位了解阿里云Elasticsearch

    摘要:阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据搜 ...

随机推荐

  1. 关于让simulink中display组件显示二进制的方法

    关于让simulink中display组件显示二进制的方法 1.首先需要配置gateway out模块,勾选propagate data type to output 2.配置display模块 fo ...

  2. vue项目做seo优化(prerender-spa-plugin vue-meta-info)

    今天公司考虑seo设计方案,服务端渲染(ssr)和 预渲染的方式,不过只是打算对几个简单的页面seo,所以选择了使用预渲染的方式,以下是实现过程中遇到的问题,供大家查看,有不对的地方请指正: 使用pr ...

  3. linux 线程同步

    参考链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711#font_size5font_2 一,互斥锁 #include &l ...

  4. mi家前端面经

    已经好久没想写面经了……菜鸟面到生无可恋. 1.用CSS实现下面圆形 答案: <!DOCTYPE html> <html> <head> <style typ ...

  5. 使用 JavaScript 拦截和跟踪浏览器中的 HTTP 请求

    HTTP 请求的拦截技术可以广泛地应用在反向代理.拦截 Ajax 通信.网页的在线翻译.网站改版重构等方面.而拦截根据位置可以分为服务器端和客户端两大类,客户端拦截借助 JavaScript 脚本技术 ...

  6. Web 应用程序项目 Himall.Web 已配置为使用 IIS。 无法访问 IIS 元数据库

    Web应用程序项目XXXX已配置为使用IIS.无法访问IIS元数据库.您没有足够的特权访问计算机上的IIS网站,xxxxiis 问题:Windows8下直接使用VS打开项目,出现问题:XXXX已配置为 ...

  7. Linux系统中lvm简介

    LVM逻辑卷管理器 实战场景:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办? 答:只能换一个更大的磁盘.如果用了一段时间后,空间又不够了,怎么办?再加一块更大的?换磁盘的过程中, ...

  8. Web漏洞扫描工具(批量脱壳、反序列化、CMS)

    一.什么是Web漏洞扫描工具 即是指“扫描Web应用以查找安全漏洞(如跨站脚本,SQL注入,命令执行,目录遍历和不安全服务器配置)的自动化工具”,其中许多可能是由不安全或不正确的编码和设计.另一方面, ...

  9. jenkins+maven+git持续集成部署问题总结

    1.这个问题出现在单独构建一个项目的子模块时,很奇怪,构建父项目没有问题. Executing Maven: -N -B -f /root/.jenkins/workspace/newMer/pom. ...

  10. python 获取中文拼音首字母;判断文件夹是否存在

    1.如何获取中文字符串的首字母 import pinyin #输入name def get_pinyin_first_alpha(name): return "".join([i[ ...