lucene

#Elasticsearch深入:Span Query

与世无争的帅哥 提交于 2020-08-18 06:24:41
Es官方文档 Span Query官方文档 Span查询是低级的位置查询,提供对指定术语的顺序和邻近性的专家控制。它们通常用于实现对法律文件或专利的非常具体的查询。 Span query 指的是es的区间查询,通过该语句用户可以精准控制多个输入词的先后顺序,以及多个关键词在文档中的前后距离 注意:不能将Span查询与非Span查询混合使用(span_multi查询除外)。 数据准备阶段 POST index_name/_analyze { "field": "name", "text": "边建军" } 结果: { "tokens" : [ { "token" : "边", "start_offset" : 0, "end_offset" : 1, "type" : "<IDEOGRAPHIC>", "position" : 0 }, { "token" : "建", "start_offset" : 1, "end_offset" : 2, "type" : "<IDEOGRAPHIC>", "position" : 1 }, { "token" : "军", "start_offset" : 2, "end_offset" : 3, "type" : "<IDEOGRAPHIC>", "position" : 2 } ] } 备注: name字段的分词为Es的默认标准分词

ElasticSearch的基本概念和集群分布式底层实现

限于喜欢 提交于 2020-08-17 08:59:46
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 深度分页引发的机器性能问题 最近碰到一个ElasticSearch深度分页搜索,导致cpu占用过高问题,通过查阅ElasticSearch: 权威指南,了解到了深度分页为何会引起机器资源占用: 在集群系统中深度分页 为了理解为什么深度分页是有问题的,让我们假设在一个有5个主分片的索引中搜索。当我们请求结果的第一页(结果1到10)时,每个分片产生自己最顶端10个结果然后返回它们给请求节(requesting node),它再排序这所有的50个结果以选出顶端的10个结果。 现在假设我们请求第1000页——结果10001到10010。工作方式都相同,不同的是每个分片都必须产生顶端的10010个结果。然后请求节点排序这50050个结果并丢弃50040个! 你可以看到在分布式系统中,排序结果的资源和时间花费随着分页的深入而成倍增长。这也是为什么网络搜索引擎中任何语句不能返回多于1000个结果的原因。 理解以上那段文字,有必要了解ElasticSearch集群以及在集群中是查询的底层原理,本文试图通过总结ElasticSearch基本概念和底层原理,加深自身理解,同时希望对使用者有所帮助,避免不必要的踩坑。 基本概念 索引(index) “索引” 这个词在 ElasticSearch

结果震荡问题(Bouncing Results)

余生颓废 提交于 2020-08-17 07:50:13
搜索同一query,结果ES返回的顺序却不尽相同,这就是请求轮询到不同分片,而未设置排序条件, 相同相关性评分 情况下,是按照所在segment中 l ucene ID 来排序的,相同数据的不同副本之间该ID是不能保证一致的,由于搜索请求是在所有有效的分片副本间轮询的,这两个document可能在原始分片里查询出来是一种顺序,在副本分片里查询出来是另一种顺序。故造成结果震荡问题。 可以 使用preference参数 (_primary_first、_replica_first等)来指定分片查询的优先级,即我们可以通过该参数来控制搜索时的索引数据分片。 如不设置该参数:在所有有效的主分片以及副本间轮询。 1. 段合并以及删除已经删除的文档的结果在节点之间并不协同,意味着主分片和副本分片中被删的文档数目可能不同。意思是说当索引有update/delete一类操作的时候,旧文档不是马上被删除的, 实际的删除操作发生在一些segment合并的阶段 。 而主副分片的segment合并完全是各不想干独立进行的,所以还未删除的旧文档是不一致的。 而出于一些实际因素的考虑,还未物理删除的文档,也是shard统计信息的一部分,这样就会导致主副分片可能存在打分score的差异。 2. 就是搜索的结果里,可能有写文档的score是一样的,对于score一样的匹配文档,ES是按照 l ucene ID(

Elasticsearch系列开篇介绍

吃可爱长大的小学妹 提交于 2020-08-17 02:47:22
少点代码,多点头发 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 从今天开始准备给大家带来全新的一系列文章,Elasticsearch系列 新系列肯定会有很多疑惑,先为大家答疑解惑,下面是今天要讲的问题 为什么写Elasticsearch系列文章? 之前在文章中也陆陆续续的提到过,龙叔是做搜索引擎的。搜索引擎技术属于商业技术,大家耳熟能详的百度搜索,Google搜索,这可都是因为把握核心搜索技术,从而诞生了商业帝国。 每个互联网大厂都想去分一杯搜索的羹,360搜索、神马、头条、搜狗搜索等等,由此可见搜索技术的商业作用和机密性了。 搜索把握用户的入口 蘑菇街的搜索引擎是一款使用C++开发、完全自研、没有开源的搜索引擎,没有开源就是不能随便写出来的。 但是现在不一样了 第一、我离职了,离开了意味着不在持有那些商业机密了,就算不讲出来我也没啥心理负担(但还是不能讲的,离职协议写的很清楚,不能 泄露公司商业机密 )。 第二、去新的公司还是在搜索领域,他们用Es Elasticsearch是一个开源搜索,开源的东西可以随便说,但还是不能说公司的 商业数据 。 自己一直在搜索领域做,输出搜索相关的文章,第一个可以让自己更好的学习和总结,第二个可以让粉丝们了解到搜索这个神秘的技术

Elasticsearch 面试题

痴心易碎 提交于 2020-08-16 14:19:23
1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。 面试官:想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大 规模的索引设计、规划、调优。 解答: 如实结合自己的实践场景回答即可。 比如:ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日 递增 20+,索引:10 分片,每日递增 1 亿+数据, 每个通道每天索引大小控制:150GB 之内。 仅索引层面调优手段: 1.1、设计阶段调优 1、根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引; 2、使用别名进行索引管理; 3、每天凌晨定时对索引做 force_merge 操作,以释放空间; 4、采取冷热分离机制,热数据存储到 SSD,提高检索效率;冷数据定期进行 shrink操作,以缩减存储; 5、采取 curator 进行索引的生命周期管理; 6、仅针对需要分词的字段,合理的设置分词器; 7、Mapping 阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。…….. 1.2、写入调优 1、写入前副本数设置为 0; 2、写入前关闭 refresh_interval 设置为-1,禁用刷新机制; 3、写入过程中:采取 bulk 批量写入; 4、写入后恢复副本数和刷新间隔; 5

.NET Core接入ElasticSearch 7.5

风格不统一 提交于 2020-08-16 09:10:04
写在前面 最近一段时间,团队在升级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使用门槛太高

.NET Core接入ElasticSearch 7.5

最后都变了- 提交于 2020-08-15 04:40:53
写在前面 最近一段时间,团队在升级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 写入数据的工作原理是什么?

99封情书 提交于 2020-08-14 07:31:12
面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是...... 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢? 面试题剖析 es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。 coordinating node 对 document 进行 路由 ,将请求转发给对应的 node(有 primary shard)。 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 es 读数据过程 可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard 去查询。

es 的分布式架构原理是什么?

大城市里の小女人 提交于 2020-08-14 02:21:17
面试题 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)? 面试官心理分析 在搜索这块,lucene 是最流行的搜索库。几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗?现在早已经 out 了,因为现在很多项目都是直接用基于 lucene 的分布式搜索引擎—— ElasticSearch,简称为 es。 而现在分布式搜索基本已经成为大部分互联网行业的 Java 系统的标配,其中尤为流行的就是 es,前几年 es 没火的时候,大家一般用 solr。但是这两年基本大部分企业和项目都开始转向 es 了。 所以互联网面试,肯定会跟你聊聊分布式搜索引擎,也就一定会聊聊 es,如果你确实不知道,那你真的就 out 了。 如果面试官问你第一个问题,确实一般都会问你 es 的分布式架构设计能介绍一下么?就看看你对分布式搜索引擎架构的一个基本理解。 面试题剖析 ElasticSearch 设计的理念就是分布式搜索引擎,底层其实还是基于 lucene 的。核心思想就是在多台机器上启动多个 es 进程实例,组成了一个 es 集群。 es 中存储数据的 基本单位是索引 ,比如说你现在要在 es 中存储一些订单数据,你就应该在 es 中创建一个索引 order_idx ,所有的订单数据就都写到这个索引里面去,一个索引差不多就是相当于是 mysql 里的一张表。 index

.NET Core接入ElasticSearch 7.5

大城市里の小女人 提交于 2020-08-12 20:52:42
原文: .NET Core接入ElasticSearch 7.5 写在前面 最近一段时间,团队在升级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