ElasticSearch 2.X升级到6.X遇到的几个问题
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遇到的几个问题的更多相关文章
- Elasticsearch集群升级指引
目录 背景 第一部分 版本升级指引 第二部分 升级方法和具体步骤 总结 参考文献及资料 背景 Elasticsearch集群的版本升级是一项重要的集群维护工作.本篇文章参考官方文档,将详细介绍相关细节 ...
- Elasticsearch1.7到2.3升级实践总结
概括 简述 升级分为Elasticsearch server升级和Elasticsearch client api升级 为什么要迁移 当前团队内多个业务方公用一套ES集群,容易被影响,重要业务应该独自 ...
- Elasticsearch和Kibana安装
Elasticsearch安装 Elasticsearch至少需要Java 8.在撰写本文时,建议你使用Oracle JDK版本1.8.0_131.Java安装因平台而异,所以在这里不再赘述.Orac ...
- 使用Java High Level REST Client操作elasticsearch
Java高级别REST客户端(The Java High Level REST Client)以后简称高级客户端,内部仍然是基于低级客户端.它提供了更多的API,接受请求对象作为参数并返回响应对象,由 ...
- Elasticsearch 学习总结 - 相关配置补充说明
一. Elasticsearch的基本概念 term索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...
- Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...
- ElasticSearch 安装, 带视频
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 疯狂创客圈 高并 ...
- Elasticsearch详解-续
Elasticsearch详解-续 Chandler_珏瑜 关注 7.6 2019.05.22 10:46* 字数 8366 阅读 675评论 4喜欢 25 5.3 性能调优 Elasticse ...
- 30分钟全方位了解阿里云Elasticsearch
摘要:阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据搜 ...
随机推荐
- 关于让simulink中display组件显示二进制的方法
关于让simulink中display组件显示二进制的方法 1.首先需要配置gateway out模块,勾选propagate data type to output 2.配置display模块 fo ...
- vue项目做seo优化(prerender-spa-plugin vue-meta-info)
今天公司考虑seo设计方案,服务端渲染(ssr)和 预渲染的方式,不过只是打算对几个简单的页面seo,所以选择了使用预渲染的方式,以下是实现过程中遇到的问题,供大家查看,有不对的地方请指正: 使用pr ...
- linux 线程同步
参考链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711#font_size5font_2 一,互斥锁 #include &l ...
- mi家前端面经
已经好久没想写面经了……菜鸟面到生无可恋. 1.用CSS实现下面圆形 答案: <!DOCTYPE html> <html> <head> <style typ ...
- 使用 JavaScript 拦截和跟踪浏览器中的 HTTP 请求
HTTP 请求的拦截技术可以广泛地应用在反向代理.拦截 Ajax 通信.网页的在线翻译.网站改版重构等方面.而拦截根据位置可以分为服务器端和客户端两大类,客户端拦截借助 JavaScript 脚本技术 ...
- Web 应用程序项目 Himall.Web 已配置为使用 IIS。 无法访问 IIS 元数据库
Web应用程序项目XXXX已配置为使用IIS.无法访问IIS元数据库.您没有足够的特权访问计算机上的IIS网站,xxxxiis 问题:Windows8下直接使用VS打开项目,出现问题:XXXX已配置为 ...
- Linux系统中lvm简介
LVM逻辑卷管理器 实战场景:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办? 答:只能换一个更大的磁盘.如果用了一段时间后,空间又不够了,怎么办?再加一块更大的?换磁盘的过程中, ...
- Web漏洞扫描工具(批量脱壳、反序列化、CMS)
一.什么是Web漏洞扫描工具 即是指“扫描Web应用以查找安全漏洞(如跨站脚本,SQL注入,命令执行,目录遍历和不安全服务器配置)的自动化工具”,其中许多可能是由不安全或不正确的编码和设计.另一方面, ...
- jenkins+maven+git持续集成部署问题总结
1.这个问题出现在单独构建一个项目的子模块时,很奇怪,构建父项目没有问题. Executing Maven: -N -B -f /root/.jenkins/workspace/newMer/pom. ...
- python 获取中文拼音首字母;判断文件夹是否存在
1.如何获取中文字符串的首字母 import pinyin #输入name def get_pinyin_first_alpha(name): return "".join([i[ ...