舟山网站建设免费咨询深圳seo公司

diannao/2026/1/27 15:14:48/文章来源:
舟山网站建设免费咨询,深圳seo公司,屏蔽ip网站吗,国内WordPress相册插件写在前面最近一段时间#xff0c;团队在升级ElasticSearch#xff08;以下简称ES#xff09;#xff0c;从ES 2.2升级到ES 7.5。也是这段时间#xff0c;我从零开始#xff0c;逐步的了解了ES#xff0c;中间也踩了不少坑#xff0c;所以特地梳理和总结一下相关的技术点… 写在前面最近一段时间团队在升级ElasticSearch以下简称ES从ES 2.2升级到ES 7.5。也是这段时间我从零开始逐步的了解了ES中间也踩了不少坑所以特地梳理和总结一下相关的技术点。❝ES小趣闻多年前一个叫做Shay Banon的刚结婚不久的开发者由于妻子要去伦敦学习厨师他便跟着也去了。在他找工作的过程中为了给妻子构建一个食谱的搜索引擎他开始使用Lucene进行尝试。直接基于Lucene工作会比较困难所以Shay开始抽象Lucene代码以便可以在应用中添加搜索功能。他发布了他的第一个开源项目叫做“Compass”。后来Shay找到一份工作这份工作处在高性能和内存数据网格的分布式环境中因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。Shay的妻子依旧等待着她的食谱搜索……❞由此看见一个成功的男人背后总是站着一个女人所以程序员们要早点找到对象可程序员找到女朋友又谈何容易程序猿注定悲伤-_-||。ElasticSearch前期准备EElasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎ES底层基于开源库Apache Lucene不过Lucene使用门槛太高ES隐藏了Lucene使用时的复杂性使得分布式实时文档搜索、实时分析引擎、高扩展性变得更加容易。安装安装ES首先要配置Java SDK然后配置一下环境变量即可。然后再从官网下载ES安装包可以选用默认配置点击下一步—安装。在浏览器上输入http://localhost:9200/显示如下文本就意味着安装成功了。❝{ name : XXXXXXXXXX, cluster_name : elasticsearch, cluster_uuid : mB04ov3OTvSz7OSe0GtZ_A, version : {  number : 7.5.2,  build_flavor : unknown,  build_type : unknown,  build_hash : 8bec50e1e0ad29dad5653712cf3bb580cd1afcdf,  build_date : 2020-01-15T12:11:52.313576Z,  build_snapshot : false,  lucene_version : 8.3.0,  minimum_wire_compatibility_version : 6.8.0,  minimum_index_compatibility_version : 6.0.0-beta1 },  tagline : You Know, for Search}❞部分基本概念节点 集群集群由多个节点组成其中一个节点为主节点主节点由内部选举算法选举产生。当然主节点是相对的是相对于内部而言的。ES去中心化这是相对于外部而言的从逻辑上说与任何一个节点的的通信和与集群通信是没有区别的。如下图所示。索引索引保存相关数据的地方是指向一个或者多个物理分片的逻辑命名空间 。另外每个Index的名字必须是小写。文档Document的核心元数据有三个_index、_type(7.X已经弱化了8.0开始就会移除)、_id。Document 使用 JSON 格式表示。分片一个分片是一个底层的工作单元它仅保存了全部数据中的一部分。我们的文档被存储和索引到分片内但是应用程序是直接与索引而不是与分片进行交互。Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器文档保存在分片内分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时 Elasticsearch 会自动的在各节点中迁移分片使得数据仍然均匀分布在集群里。一个分片可以是主分片或者副本分片。索引内任意一个文档都归属于一个主分片所以主分片的数目决定着索引能够保存的最大数据量。一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份并为搜索和返回文档等读操作提供服务。在索引建立的时候就已经确定了主分片数但是副本分片数可以随时修改。理论上一个主分片最大能够存储Integer.MAX_VALUE^128 个文档。写操作探讨文档会被保存到主分片那么在多个分片的情况下是如何写入和精确搜索的。实际上这是通过以下公式确定的shard hash(routing) % number_of_primary_shards以上的routing的值是一个任意的字符串它默认被设置成文档的_id字段但是也可以被设置成其他指定的值。这个routing字符串会被传入到一个哈希函数(Hash Function)来得到一个数字然后该数字会和索引中的主要分片数进行模运算来得到余数。这个余数的范围应该总是在0和number_of_primary_shards - 1之间它就是一份文档被存储到的分片的号码。这就解释了为什么索引中的主要分片数量只能在索引创建时被指定并且将来都不能在被更改如果主要分片数量在索引创建后改变了那么之前的所有路由结果都会变地不正确从而导致文档不能被正确地获取。那么如何水平扩展呢可以移步Designing for scale。所有的文档API(get, index, delete, bulk, update)都接受一个routing参数它用来定制从文档到分片的映射。一个特定的routing值能够确保所有相关文档 - 比如属于相同用户的所有文档 - 都会被存储在相同的分片上。写操作原理图写入的请求流程如图所示此图源自《Elasticsearch权威指南》写入到磁盘流程如下图所示由此可见ES的实时并非是完全的实时而是一种准实时(Near-Real-Time)。读操作探讨读操作分为两个阶段查询阶段Query Phrase以及聚合提取阶段(Fetch Phrase)。查询阶段协调节点接受到读请求并将请求分配到相应的分片上有可能是主分片或是副本分片这个机制后续会提及默认情况下每个分片创建10个结果仅包含 document_id 和 Scores的优先级队列并以相关性排序返回给协调节点。❝查询阶段如果不特殊指定落入的分片有可能是 primary 也有可能是 replicas这个根据协调节点的负载均衡算法来确定。❞聚合提取阶段假设查询落入的分片数为 N那么聚合阶段就是对 N*10 个结果集进行排序然后再通过已经拿到的 document_id 查到对应的 document 并组装到队列里组装完毕后将有序的数据返回给客户端。客户端发送请求到任意一个Node成为Coordinating nodeCoordinating node对Document进行路由将请求转发到对应的Node上此时会使用Round-Robin随机轮询算法在Primary Shard以及其所有Replica中随机选择一个让读请求负载均衡接收请求的node返回Document给Coordinating nodeCoordinating node返回Document给客户端ElasticSearch实战ES在.NET平台上的官方客户端是NEST以下操作都是基于该package的。常用操作以下操作均基于ES-Head该工具是一个Chrome插件非常简单实用而且可以在GitHub上搜到源码方便个性化开发。写入数据返回的数据中可以看到Id是一段字符串这是因为在写入的过程中并没有指定所以会由ES默认生成。当然可以指定更新数据_version值会随着操作次数逐渐迭代。删除数据cluster查询操作cluster项目升级过程中遇到的问题分页查询过慢初次的查询使用了深度分页(from-size)查询当数据达到百万千万级别时已经慢的让人忍无可忍。所谓深度查询就是涉及到大量 shard 的查询时直接跳页到几千甚至上万页的数据协调节点就有宕机的风险毕竟协调节点需要将大量数据汇总起来进行排序耗费大量的内存和 CPU 资源。所以慎用尽可能用 Scroll API 即只允许拿到下一页的信息不允许跳页的情况出现会避免这种情况的发生。后来改用了快照分页(scroll)整个查询过程非常稳定方差几乎可以忽略。该查询会自动返回一个_scroll_id通过这个id(经过base64编码)可以继续查询。查询语句如下http://localhost:9200/_search/scroll?scroll1mscroll_idc2MkjsjskMkkssllasKKKOzM0NDg1ODpksksks5566HHsaskLLLqi692215。这个语句虽然很快但是无法做到跳页查询只能一页一页的查询。快照分页参考代码如下❝var searchResponse client.Search(p p.Query(t t.Bool(l l.Filter(f f.DateRange(m m.GreaterThanOrEquals(startTime).Field(d d.PostDate))))).From(0).Size(Configurations.SyncSize).Index(archive).Sort(s s.Ascending(a a.PostDate)).Scroll(60s)); while(某条件){searchResponse client.ScrollElasticsearchTransaction(60s, searchResponse.ScrollId);//跳出循环的条件 }❞模糊查询该场景涉及到多个字段的模糊查询当然这种查询是十分消耗效率的使用的时候要慎重同时还要控制模糊关键字的数量以尽可能在满足业务的情况下提升查询效率参考代码如下❝public static ListIHit GetDataByFuzzy(ElasticClient client9200) {string[] fieldList {filed1,filed2,filed3,filed4,filed5,filed6,filed7,filed8,filed9 };string term string.Concat(*, string.Join(* *, i u a n.Split(new[] { }, StringSplitOptions.RemoveEmptyEntries)), *); var result client9200.SearchTModel(p p.Query(q q.Bool(bb.Must(tt.QueryString(c c.Fields(fieldList).Query(term).Boost(1.1).Fuzziness(Fuzziness.Auto).MinimumShouldMatch(2).FuzzyRewrite(MultiTermQueryRewrite.ConstantScoreBoolean).TieBreaker(1).Lenient())).Filter(ff.Term(tt.Field(dd.AccountKey).Value(123456789))))).ScriptFields(sf sf.ScriptField(datetime1,sc sc.Source(doc[datetime1].value null?doc[datetime2].value: doc[datetime1].value))).Source(true).Index(archive).From(0).Size(10000).Sort(s s.Descending(a a.CreateDate)));return result.Hits.Select(pp.Source).ToList(); }❞关于排序在本次的ES优化升级过程中关于排序的操作可以说是很纠结的。按照业务要求要根据两个时间类型的字段进行排序如果某个为空就按照不为空的排序使得其排序结果达到穿插的效果而不是像SQL语句那样order field1, field2的排序结果那样。找出解决方案的过程很痛苦因为官方的demo无法运行经过多方尝试终于在查看ElasticSearch源代码的情况下找到了解决方案。Github地址https://github.com/elastic/elasticsearch/blob/master/server/src/main/java/org/elasticsearch/script/JodaCompatibleZonedDateTime.java第411行查询语句如下❝{from: 0, query: {bool: {filter: [{term: {UserId: {value: 123456789}}}]} }, size: 10, sort: [{_script: {script: {source: doc.DateTime1.empty?doc.DateTime2.value.toInstant().toEpochMilli():doc.DateTime1.value.toInstant().toEpochMilli()},type: number,order: desc}} ] }❞C#参考代码如下❝var searchResponse _elasticsearchClient.Search(s s .Query(q q.Bool(b b.Filter(m m.Term(t t.Field(f f.UserId).Value(userId)),m m.QueryString(qs qs.Fields(fieldList).Query(term.PreProcessQueryString()))))).Index(indexName).ScriptFields(sf sf.Source(true).Sort(ss.Script(srsr.Script(doc doc.Source(doc.DateTime1.empty ? doc.DateTime2.value.toInstant().toEpochMilli() : doc.DateTime1.value.toInstant().toEpochMilli())))).From(startIndex).Size(pageSize)); ❞参考链接https://www.dazhuanlan.com/2020/02/13/5e44f118b75cb/ https://www.toutiao.com/i6824365055832752653

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八年级上册信息书怎么做网站健身网站设计模板下载

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Qt Creator快捷键 二、对象树 1、对象树的析构 2、自定义类的编写…

免费建网站 步骤wordpress 注册菜单

★【二叉搜索树&#xff08;中序遍历特性&#xff09;】【 ★递归双指针】Leetcode 98. 验证二叉搜索树 二叉搜索树 98. 验证二叉搜索树解法1 笨 中序递归遍历为一个数组 然后判断数组是不是升序排列就可以★解法2 不使用数组 递归法 ---------------&#x1f388;&#x1f38…

网站项目整体思路网页制作素材ps文件

1.初识qt--》qt是个框架&#xff0c;不是语言 1.学习路径 一 QT简介 &#xff0c;QTCreator &#xff0c;QT工程 &#xff0c;QT的第一个程序&#xff0c;类&#xff0c;组件 二 信号与槽 三 对话框 四 QT Desiner 控件 布局 样式 五 事件 六 GUI绘图 七 文件 八 …

网站的行为怎么做公司网站SEO优化哪个做得好

1.window.open 我最初使用的方法就是这个&#xff0c;只要提供了文件的服务器地址&#xff0c;使用window.open也就是在新窗口打开&#xff0c;这时浏览器会自动执行下载。 2.a标签 其实window.open和a标签是一样的&#xff0c;只是a标签是要用户点击触发&#xff0c;而wind…

什么创网站网站开发文档带er图

掌握类模板配合友元函数的类内实现和类外实现。 全局函数类内实现&#xff1a;直接在类内声明友元函数即可&#xff08;推荐使用这种&#xff09; #include <iostream> #include <Windows.h> #include <string>using namespace std;template<typename T…

网站建设运行状况做旅游网站的任务

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

saas建站没有网站源代码么企业商城建站

在互联网的海洋中&#xff0c;HTTP代理服务器像一座灯塔&#xff0c;为我们的网络冲浪提供了指引。而当Go语言遇上HTTP代理&#xff0c;会碰撞出怎样的火花呢&#xff1f;今天&#xff0c;让我们一起探讨Go语言中的HTTP代理模式&#xff0c;看看它如何玩转这个网络中转站&#…

宁波网站排名公司电子商务网站开发时间进度表

MySQL由几块组成 连接器分析器优化器执行器 MySQL的三大log blog 作用&#xff1a; 用于主从同步与数据恢复 记录内容&#xff1a; 已经完成的 DML(数据操作语句)&#xff0c;主要是用于数据备份 redolog<重试日志> 作用&#xff1a; 崩溃恢复&#xff0c;用于事…

门户网站运营河南企业站seo

guoqingjie已经过去两天了&#xff0c;因为楠哥生病&#xff0c;我们搁浅在了深圳&#xff0c;不过相比在路上的奔波&#xff0c;待在家里感觉惬意不少&#xff0c;不用在路上各种操心&#xff0c;之前上班感冒&#xff0c;身体处在亚健康状态&#xff0c;睡了两天身体也恢复一…

福州 哈尔滨网站建设 网络服务制作灯笼的做法

文章目录 一、前言二、示例源码【1】目录结构【2】Makefile源码【3】h264parser.c源码【4】编译运行【5】源码下载地址 声明&#xff1a;此篇示例源码非原创&#xff0c;原作者雷霄骅。雷霄骅&#xff0c;中国传媒大学通信与信息系统专业博士生&#xff0c;在此向雷霄骅雷神致敬…

东莞做网站排名优化推广wordpress 网站为什么打不开

1.git init 2.复制仓库地址&#xff08;默认的HTTPS就可以&#xff09; 3. 本地仓库与远程仓库建立连接 4. git remote add origin 远程仓库地址 5. 将远程仓库的文件拉到本地仓库中 git pull origin master6.将本地文件上传到本地仓库&#xff08;全部&#xff09; git add …

麒麟区住房和城乡建设局网站专业网站建设商家

文章目录 每日一句正能量前言&#xff1a;启航IT世界&#xff0c;高考后的暑期学习之旅基础课程预习指南基础课程预习指南&#xff1a;构建你的IT知识大厦引言一、计算机科学导论二、编程语言入门三、操作系统基础四、数据结构与算法五、网络基础六、数据库原理结语 技术学习路…

网站开发的需求分析论文wordpress自定义title

今天给大家分享一下SQLServer中生成GUID的用法。一、NEWID用法NEWID()作用是生成无顺序的GUID字符串。用法如下&#xff1a;SELECT NEWID() --生成36位的GUIDSELECT REPLACE(newid(), -, ) -- 生成32 位的GUID二、NEWSEQUENTIALID用法1、NEWSEQUENTIALID是什么&#xff1f;在指…

推荐几个自学做衣服的网站随州网站建设厂家

近年来&#xff0c;曾经被寄予厚望的网络安全行业似乎正逐渐失去昔日的辉煌。曾经一度备受瞩目的网络安全专业&#xff0c;如今却面临着降薪、裁员的困境。许多公司对网络安全的重视程度不高&#xff0c;网络安全岗位成了背锅的代名词。在这样的环境下&#xff0c;有人开始质疑…

如何看一个网站开发语言wordpress p2 theme

转载&#xff1a;https://www.cnblogs.com/jjxhp/p/11736066.html#_label0 一、滚轮事件的 js 写法 二、jQuery写法 三、参考 四、滚轮事件滚动过快&#xff0c;事件触发两次 一、js //判断鼠标滚轮滚动方向 if (window.addEventListener){ //FF,火狐浏览器会识别该方法wind…

泰州公司网站建设我想做个软件平台要多少钱

为什么80%的码农都做不了架构师&#xff1f;>>> 最近碰到客户整个网站改版的需要&#xff0c;非常短的时间里只有1周时间里&#xff0c;需要把整个B2C网站彻底的进行版面&#xff0c;我自己估算了一下&#xff0c;就是往死里干一天工作48个小时&#xff0c;1周也干…

泰安医院网站建设制作网页页面

文章目录 一、Postman断言1、断言位置2、Postman的常用断言3、操作实例 二、全局变量与环境变量1、二者区分2、设置全局变量3、设置环境变量 三、Postman接口关联1、概念2、操作步骤 四、批量执行测试用例1、操作步骤2、查看结果 五、读取外部文件实现参数化1、使用场景2、操作…

做壁画的网站图片生成器下载

在游戏开发中&#xff0c;数据的处理和导出是至关重要的环节之一。Unity作为一款强大的游戏开发引擎&#xff0c;提供了丰富的工具和功能来处理和导出数据&#xff0c;包括将游戏导出为WebGL应用&#xff0c;并读取外部数据文件&#xff0c;比如Excel表格。本文将介绍如何在Uni…

高端品牌网站建设九五网络华强北网上商城

分析题&#xff1a;出处 1.以太网交换机进行转发决策时使用的 PDU 地址是 _________。 &#xff08;A &#xff09; A&#xff0e;目的物理地址 B.目的 IP 地址 C.源物理地址 D.源 IP 地址 分析&#xff1a;以太网交换机属于数据链路的设备&#xff0c;用的是MAC地址/物理地…

高密市住房和城乡建设局网站嵌入式软件开发培训机构

java登录界面命令本系列有关从Java解析命令行参数的系列简要介绍了28个开源库&#xff0c;这些库可用于处理Java代码中的命令行参数。 即使涵盖了这28个库&#xff0c;该系列也没有涵盖用于解析Java命令行选项的所有可用开源库。 例如&#xff0c;本系列文章未涉及docopt &…