ElasticSearch
文章平均质量分 72
L.ZZ
这个作者很懒,什么都没留下…
展开
-
Elasticsearch的match和match_phrase查询
1. match_phasematch_phase习语匹配,查询确切的phase,在对查询字段定义了分词器的情况下,会使用分词器对输入进行分词,然后返回满足下述两个条件的document:1.match_phase中的所有term都出现在待查询字段之中2.待查询字段之中的所有term都必须和match_phase具有相同的顺序{ "foo":"I just said hello world" }{ "foo":"Hello world" }{ "foo":"World Hello" }转载 2021-10-28 09:41:51 · 1315 阅读 · 0 评论 -
Elasticsearch Suggester详解
1. 前言现代的搜索引擎,一般会具备"Suggest As You Type"功能,即在用户输入搜索的过程中,进行自动补全或者纠错。 通过协助用户输入更精准的关键词,提高后续全文搜索阶段文档匹配的程度。例如在Google上输入部分关键词,甚至输入拼写错误的关键词时,它依然能够提示出用户想要输入的内容:如果自己亲手去试一下,可以看到Google在用户刚开始输入的时候是自动补全的,而当输入到一定长度,如果因为单词拼写错误无法补全,就开始尝试提示相似的词。那么类似的功能在Elasticsearch里如何实转载 2021-08-25 19:42:16 · 729 阅读 · 0 评论 -
Elasticsearch 7.x : 刷新周期 refresh_interval
1. 简介当数据添加到索引后并不能马上被查询到,等到索引刷新后才会被查询到。 refresh_interval 配置的刷新间隔。refresh_interval 的默认值是 1s。单位:如果是指定的纯数字,单位是毫秒。当 refresh_interval 为 -1 时,意味着不刷新索引。ms: 毫秒s: 秒m: 分钟当需要大量导入数据到ES中,可以将 refresh_interval 设置为 -1 以加快导入速度。导入结束后,再将 refresh_interval 设置为一个正数,例转载 2021-07-08 15:36:01 · 4288 阅读 · 0 评论 -
Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文章给讲透了!
1. 前言之前已经分享过Elasticsearch的使用和原理的知识,由于近期在公司内部做了一次分享,所以本篇主要是基于之前的博文的一个总结,希望通过这篇文章能让读者大致了解Elasticsearch是做什么的以及它的使用和基本原理。2. 生活中的数据搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:结构化数据 和 非结构化数据。结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指转载 2021-05-20 17:46:03 · 444 阅读 · 0 评论 -
Elasticsearch 技术分析(八):剖析 Elasticsearch 的索引原理
1. 前言创建索引的时候,我们通过Mapping 映射定义好索引的基本结构信息,接下来我们肯定需要往 ES 里面新增业务文档数据了,例如用户,日志等业务数据。新增的业务数据,我们根据 Mapping 来生成对应的倒排索引信息 。我们一直说,Elasticsearch是一个基于Apache Lucene 的开源搜索引擎。Elasticsearch的搜索高效的原因并不是像Redis那样重依赖内存的,而是通过建立特殊的索引数据结构–倒排索引实现的。由于它的使用场景:处理PB级结构化或非结构化数据,数据量大且需转载 2021-05-19 16:27:00 · 284 阅读 · 0 评论 -
ElasticSearch检索时特殊字符处理
1. 处理措施ElasticSearch检索时,出现特殊字符而没有做正确的处理,那么ElasticSearch将无法识别这条检索语句,则会抛出异常,此时就的对检索语句进行转义;例如:String title = "title+-&&||!(){}[]^\"~*?:\\";title = QueryParser.escape(title); // 主要就是这一句把特殊字符都转义,那么lucene就可以识别searchRequestBuilder.setQuery(QueryBuil转载 2021-04-27 10:40:04 · 3782 阅读 · 0 评论 -
ElasticSearch索引数据版本(_version)控制(5.4版本)
1. 用于处理冲突通常,当数据库因为请求冲突发生幻读问题时,有两种解决策略:悲观并发控制如:行级锁;乐观并发控制如:写操作时发现数据发生变化,操作失败。ElasticSearch采用乐观并发控制。Elasticsearch是分布式的,当文档被创建、更新或删除,文档的新版本会被复制到集群的其它节点。Elasticsearch即是同步的又是异步的,意思是这些复制请求都是平行发送的,并无序(out of sequence)的到达目的地。这就需要一种方法确保老版本的文档永远不会覆盖新的版本。这时就用到转载 2021-04-09 20:11:51 · 2876 阅读 · 0 评论 -
Elasticsearch相同两次搜索出现不一样的结果
1. 原因主要的原因是因为有副本(replica)的存在,主分片和副本分片可能不一致,导致最终在主分片和副本分片上计算得到的得分不同,而导致最终的查询结果不一致。但是是如何造成主分片和副本分片不一致的情况,可能是因为用户删除了部分文档,之后主分片进行了merge, 而副本分片没有进行merge。 这种情况下主分片和副本分片上的总文档数量就会不同,打分时计算出的IDF的值不同,最终得到了不同的得分。2. 解决办法解决方式就是在查询时指定preference, 可以指定为_primary、_replic原创 2020-11-20 16:47:49 · 2190 阅读 · 1 评论 -
Elasticsearch的query then fetch和dfs query then fetch
1. 前言在使用Elasticsearch的时候,有时会遇到这种评分问题:为何文档“drunk”分数为1.0,而其余的分数是0.3?难道这些文档不应该是相同的分数么,因为他们都同等地匹配了“d”。答案是肯定的,但是这个分数本身也有比较合理的地方。ES评分相关可参考:Elasticsearch相关度评分算法$ curl -XGET localhost:9200/startswith/test/_search?pretty -d '{ "query": { "match_p转载 2020-11-12 11:30:56 · 2556 阅读 · 0 评论 -
Elasticsearch相关度评分算法
1. 相关度评分算法的组成对于Elasticsearch而言,相关度评分的计算规则通过三部分组成: boolean model,TF/IDF,Vector space model。这三个部分没有所谓的权重,它们是平等的,计算时逐层推进。1.1 boolean modelboolean model是相关度分数计算的第一步操作。Elasticsearch搜索时,首先根据搜索条件,过滤出符合条件的document,此时Elasticsearch不会做任何的相关度分数计算,仅仅只记录true或false,标转载 2020-11-12 10:41:03 · 1976 阅读 · 0 评论 -
理解Elasticsearch中的桶聚合(Bucket aggregation)
0. 前言Elasticsearch除了在搜索方面非常之快,对数据分析也是非常重要的一面。正确理解Bucket aggregation对我们使用Kibana非常重要。Elasticsearch提供了非常多的aggregation可以供我们使用。其中Bucket aggregation对于初学者来说也是比较不容易理解的一个。在今天的这篇文章中,我来重点讲述这个。简单地说:一个桶代表一个具有共同标准的文档集合。存储桶(bucket)是聚合的关键要素。比如,我们想分析每个月的log流量:桶聚合(bucke转载 2020-08-13 16:21:50 · 6177 阅读 · 0 评论 -
Elasticsearch时间序列数据聚合
0. 前言本章翻译自Elasticsearch官方指南的Looking at Time一章。1. 时间数据处理(Looking at Time)如果在ES中,搜索是最常见的行为,那么创建日期柱状图(Date Histogram)肯定是第二常见的。为什么要使用日期柱状图呢?想象在你的数据中有一个时间戳。数据是什么不重要-Apache日志事件,股票交易日期,棒球比赛时间-任何拥有时间戳的数据都能通过日期柱状图受益。当你有时间戳时,你经常会想创建基于时间的指标信息:今年的每个月销售了多少辆车?过转载 2020-08-12 16:40:07 · 1818 阅读 · 0 评论 -
Elasticsearch中 refresh 和flush区别
1. 前言Elasticsearch中有两个比较重要的操作:refresh 和 flush2. refresh操作当我们向ES发送请求的时候,我们发现es貌似可以在我们发请求的同时进行搜索。而这个实时建索引并可以被搜索的过程实际上是一次es 索引提交(commit)的过程,如果这个提交的过程直接将数据写入磁盘(fsync)必然会影响性能,所以es中设计了一种机制,即:先将index-buffer中文档(document)解析完成的segment写到filesystem cache之中,这样避免了比较损转载 2020-07-31 10:31:27 · 465 阅读 · 0 评论 -
Elasticsearch的translog与刷新操作
1. 前言如果没有用 fsync 把数据从文件系统缓存刷(flush)到硬盘,我们不能保证数据在断电甚至是程序正常退出之后依然存在。为了保证 Elasticsearch 的可靠性,需要确保数据变化被持久化到磁盘。在动态更新索引,我们说一次完整的提交会将段刷到磁盘,并写入一个包含所有段列表的提交点。Elasticsearch 在启动或重新打开一个索引的过程中使用这个提交点来判断哪些段隶属于当前分片。即使通过每秒刷新(refresh)实现了近实时搜索,我们仍然需要经常进行完整提交来确保能从失败中恢复。但在转载 2020-07-29 20:25:24 · 6558 阅读 · 0 评论 -
如何使用 Kerberos 确保您 Elasticsearch 集群的安全
1. 希腊神话中的三头猛犬保护您的数据Elasticsearch 6.4 针对白金级订阅新增了 Kerberos 身份验证支持,在转型为完全 Kerberos 式 Elastic Stack 的道路上迈出了第一步。Kerberos 是一项成熟的技术,能够允许在分布式系统中进行安全身份验证。Kerberos 可让用户通过单点登录方式访问不同服务,无需用户重复提供用户名和密码。本篇博文讲解了如何对 Elasticsearch 进行配置,从而支持对 HTTP 流量进行 Kerberos 身份验证。2. 部署概转载 2020-07-03 09:48:46 · 1474 阅读 · 1 评论 -
Elasticsearch中的date与时区问题
1 前言本文主要讲解Elasticsearch中date类型数据的底层存储原理,以及对带时区日期字符串和不带时区的日期字符串如何在ES底层存储进行验证。对于直接存储Long类型时间戳,不作过多描述。1.1 Date类型数据的存储UTC(Universal Time Coordinated) 叫做世界统一时间,中国大陆所用的时间是东8区时间,比UTC时间超前8小时。即与 UTC 的时差是 +8 ,也就是 UTC+8。在Elasticsearch内部,不论 date 是什么展示格式,所有date类型数据原创 2020-06-23 20:16:17 · 13767 阅读 · 2 评论 -
ElasticSearch - function_score (衰减函数 linear、exp、gauss 具体实例)
阅读本文需要先了解function_score的相关知识,请看 ElasticSearch - function_score 详解1. 前言很多变量都可以影响用户对于酒店的选择,像是用户可能希望酒店离市中心近一点,但是如果价格足够便宜,也愿意为了省钱,妥协选择一个更远的住处。如果我们只是使用一个 filter 排除所有市中心方圆 100 米以外的酒店,再用一个filter排除每晚价格超过100元的酒店,这种作法太过强硬,可能有一间房在 500米,但是超级便宜一晚只要10元,用户可能会因此愿意妥协住这.转载 2020-05-29 16:53:10 · 6114 阅读 · 0 评论 -
ElasticSearch - function_score (field_value_factor具体实例)
1. 数据准备首先准备数据和索引,在ES插入三条数据,其中title是text类型,like是integer类型(代表点赞量)。{ "title": "ES 入门", "like": 2 }{ "title": "ES 进阶", "like": 5 }{ "title": "ES 最高难度", "like": 10 }2. function_score (field_value_factor)示例2.1 普通查询先使用一般的query,查看普通的查询的评分会是如何:GET 127.0.0.转载 2020-05-28 17:23:40 · 2495 阅读 · 0 评论 -
ElasticSearch - function_score详解
1. 前言在使用 Elasticsearch 进行全文搜索时,搜索结果默认会以文档的相关度进行排序,如果想要改变默认的排序规则,也可以通过sort指定一个或多个排序字段。但是使用sort排序过于绝对,它会直接忽略掉文档本身的相关度(根本不会去计算)。在很多时候这样做的效果并不好,这时候就需要对多个字段进行综合评估,得出一个最终的排序。Elasticsearch提供了function_score功能来满足我们的需求。2. function_score简介在使用ES进行全文搜索时,搜索结果默认会以文档的相转载 2020-05-28 15:53:04 · 7208 阅读 · 0 评论 -
Elasitcsearch写操作与读操作底层原理
1. 写操作(Write):针对文档的CRUD操作1.1 索引新文档(Create)当用户向一个节点提交了一个索引新文档的请求,节点会计算新文档应该加入到哪个分片(shard)中。每个节点都存储有每个分片存储在哪个节点的信息,因此协调节点会将请求发送给对应的节点。注意这个请求会发送给主分片,等主分片完成索引,会并行将请求发送到其所有副本分片,保证每个分片都持有最新数据。每次写入新文档时,都会先写入内存中,并将这一操作写入一个translog文件(transaction log)中,此时如果执行搜索操作转载 2020-05-28 10:58:30 · 326 阅读 · 0 评论 -
图解Elasticsearch中的_source、_all、store和index属性
1. 前言Elasticsearch中有几个关键属性容易混淆,很多人搞不清楚_source字段里存储的是什么?store属性的true或false和_source字段有什么关系?store属性设置为true和_all有什么关系?index属性又起到什么作用?什么时候设置store属性为true?什么时候应该开启_all字段?本文通过图解的方式,深入理解Elasticsearch中的_source...转载 2020-04-24 11:09:35 · 786 阅读 · 1 评论 -
ElasticSearch的store属性与_source
1. 前言众所周知_source字段存储的是索引的原始内容,那store属性的设置是为何呢?es为什么要把store的默认取值设置为no?设置为yes是否是重复的存储呢?2. store属性与_source的关系当你将一个field的store属性设置为true,这个会在lucene层面处理。lucene是倒排索引,可以执行快速的全文检索,返回符合检索条件的文档id列表。在全文索引之外,lu...原创 2020-04-22 15:20:30 · 1191 阅读 · 0 评论 -
Elasticsearch检索-高亮显示
1. 前言Elasticsearch中的默认高亮显示和solr的默认高亮都是基于lucene highlight的,之前没接触过搜索引擎的小伙伴可能不太了解什么是高亮下面看看官方文档上对于高亮的介绍。Highlighters enable you to get highlighted snippets from one or more fields in your search result...转载 2020-04-22 10:58:59 · 2012 阅读 · 1 评论 -
ElasticSearch高亮查询plian、postings、fvh 实现原理和差异
1. 前言很多应用场景下,搜索带高亮显示可以较好的改善用户体验。常用的企业搜索引擎Elasticsearch、Solr中均提供了高亮的功能。Elasticsearch、Solr中的高亮显示是均来源于lucene的高亮模块,luncene允许在一个或者多个字段上突出显示搜索内容,在中高亮方式上,lucene支持三种高亮显示方式highlighter, fast-vector-highlighter...转载 2020-04-22 10:50:00 · 775 阅读 · 0 评论 -
Elasticsearch的dynamic 与 index.mapper.dynamic
1. 说明dynamic是用来设置某个type如何处理新增的字段(即字段的动态映射)index.mapper.dynamic 是用来设置是否可以动态生成type2. 动态映射(dynamic)ES中有一个非常重要的特性——动态映射,即索引文档前不需要创建索引、类型等信息,在索引的同时会自动完成索引、类型、映射的创建。那么什么是映射呢?映射就是描述字段的类型、如何进行分析、如何进行索引等内容...转载 2020-03-12 10:43:32 · 1358 阅读 · 1 评论 -
Elasticsearch7.4.0 安装analysis-ik中文分词插件
1. 前言打开IK的github:https://github.com/medcl/elasticsearch-analysis-ik/tree/master2. 安装方式一直接进入ES的根目录下,执行下面的这个命令安装即可:./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-...原创 2020-03-02 16:14:03 · 1652 阅读 · 0 评论 -
Elasticsearch性能优化实践
1. 前言Elasticsearch是一款流行的分布式开源搜索和数据分析引擎,具备高性能、易扩展、容错性强等特点。它强化了Apache Lucene的搜索能力,把掌控海量数据索引和查询的方式提升到一个新的层次。本文结合开源社区和阿里云平台的实践经验,探讨如何调优Elasticsearch的性能提高索引和查询吞吐量。2. Elasticsearch部署建议2.1 选择合理的硬件配置,尽可能使用...转载 2020-02-26 11:11:30 · 1636 阅读 · 0 评论 -
ElasticSearch 参数调优
1. 系统层面的调优系统层面的调优主要是内存的设定与避免交换内存。ES 安装后默认设置的堆内存是 1GB,这很明显是不够的,那么接下来就会有一个问题出现:我们要设置多少内存给 ES 呢?其实这是要看我们集群节点的内存大小,还取决于我们是否在服务器节点上还是否要部署其他服务。如果内存相对很大,如 64G 及以上,并且我们不在 ES 集群上部署其他服务,那么我建议 ES 内存可以设置为 3...转载 2020-02-25 18:20:15 · 2649 阅读 · 0 评论 -
ElasticSearch 性能优化
1. 概要索引层面:增加 Refresh 时间间隔减少副本数量开启异步刷写开启慢查询日志服务器层面:内存设置集群分片设置Mapping建模索引优化设置查询优化2. 详情2.1...转载 2020-02-25 17:04:24 · 717 阅读 · 0 评论 -
elasticsearch 类似SQL中in语法的实现
1. SQL语句示例select * from table where t_id in (1,2,3,4)2. 对应es查询语法GET /index/type/_search{ "query": { "terms": { "t_id": [ 1,2,3,4 ] } }}3. 对应Java APISearchReques...转载 2019-11-20 15:18:34 · 3469 阅读 · 0 评论 -
如何在Elasticsearch中使用pipeline API来对事件进行处理
1. 前言在Elasticsearch 5.0之前,如果我们想在将文档索引到Elasticsearch之前预处理文档,那么唯一的方法是使用Logstash或以编程方式/手动预处理它们,然后将它们索引到Elasticsearch。 Elasticsearch缺乏预处理/转换文档的能力,它只是按原样索引文档。 但是,在Elasticsearch 5.x之后引入一个名为ingest node的功能,为...转载 2019-11-20 10:45:47 · 815 阅读 · 0 评论 -
Elasticsearch Pipeline 详解
1. 前言并非完全翻译,会穿插相关的 Java API 来来辅助进行说明(但基本会覆盖官方所有翻译)原文地址: Processors版本:6.0.0说明本文是建立在有一些 Elasticsearch 基础和了解相关 Pipeline 概念的人2. 简介 Ingest NodeIngest Node(预处理节点)是 ES 用于功能上命名的一种节点类型,可以通过在 elasticse...转载 2019-11-15 14:27:12 · 5293 阅读 · 2 评论 -
ElasticSearch 索引模板使用
1. 索引模板索引模板,故名思议,就是创建索引的模板,模板中包含公共的配置(settings)和映射(Mapping),并包含一个简单触发条件,及条件满足时使用该模板创建一个新的索引。注意:模板只在创建索引时应用。更改模板不会对现有索引产生影响。当使用create index API时,作为create index调用的一部分定义的设置/映射将优先于模板中定义的任何匹配设置/映射。2. ...原创 2019-11-15 11:12:43 · 2471 阅读 · 1 评论 -
elasticsearch-java api之索引(index)的各种操作
1. 创建索引:1)简单索引——没有指定mappingpublic static boolean createIndex(String indexName) { IndicesAdminClient indicesAdminClient = transportClient.admin() .indices(); CreateIndexResponse response = in...转载 2019-11-05 17:57:33 · 911 阅读 · 1 评论 -
Elasticsearch别名操作api
1.前言在es里面index aliases就像是软连接一样,它可以映射一个或多个索引,提供了非常灵活的特性,使用它我们可以做到:(1)在一个运行中的es集群中无缝的切换一个索引到另一个索引上(2)分组多个索引,比如按月创建的索引,我们可以通过别名构造出一个最近3个月的索引(3)查询一个索引里面的部分数据构成一个类似数据库的视图(views)es里面操作索引别名的有两个api命令:_a...转载 2019-11-05 16:34:52 · 2294 阅读 · 1 评论 -
Elasticsearch 自定义多个分析器
1. 前言1.1 分析器(Analyzer)Elasticsearch 无论是内置分析器还是自定义分析器,都由三部分组成:字符过滤器(Character Filters)、分词器(Tokenizer)、词元过滤器(Token Filters)。1.2 分析器Analyzer工作流程Input Text => Character Filters(如果有多个,按顺序应用) => ...转载 2019-10-22 17:00:44 · 681 阅读 · 0 评论 -
ElasticSearch - 自定义分析器
1. 前言ElasticSearch的分析器实际上是将三个功能封装在一起,这三个功能按照顺序执行,而这三个功能都是能自定义的字符过滤器 (char_filter)首先,字符串按顺序通过每个字符过滤器,他们的任务是在分词前整理字符串,一个字符过滤器可以用来去掉HTML,或者将&转化成and。分词器 (tokenizer)其次,字符串被分词器分爲单个的词条,一个简单的分词器遇到空格...转载 2019-10-22 11:01:01 · 235 阅读 · 0 评论 -
使用Idea本地调试ElasticSearch源码教程
1. 环境准备操作系统:Windows7JDK版本:Java version "1.8.0_201"Gradle版本:Gradle 3.3ElasticSearch源码版本:Github branch 5.4(5.4分支代码内部实际ES版本为5.4.4)ElasticSearch发行版版本:elasticsearch-5.4.3(ES发行版没有5.4.4版本,此处使用5.4.3)...原创 2019-04-01 14:27:05 · 3608 阅读 · 0 评论 -
ElasticSearch之四种查询类型
1. 前言ES在查询时, 可以指定搜索类型为下面四种:QUERY_THEN_FETCHQUERY_AND_FEATCHDFS_QUERY_THEN_FEATCHDFS_QUERY_AND_FEATCH那么这 4 种搜索类型有什么区别?2. ES的分布式搜索ES 天生就是为分布式而生, 但分布式有分布式的缺点。 比如要搜索某个单词, 但是数据却分别在 5 个分片(Shard)上面,...转载 2019-04-02 09:54:33 · 5659 阅读 · 1 评论 -
ElasticSearch数据类型keyword和text的区别
1. 前言在 ES2.x 版本字符串数据是没有 keyword 和 text 类型的,只有string类型,ES更新到5.x版本后,取消了 string 数据类型,代替它的是 keyword 和 text 数据类型,那么 keyword 和 text 有什么区别了?2. text类型text 数据类型被用来索引长文本,比如说电子邮件的主体部分或者一款产品的介绍。这些文本会被分析,在建立索引前...转载 2019-03-28 13:57:24 · 1436 阅读 · 0 评论