Elasticsearch
文章平均质量分 55
梦想画家
开源软件爱好者,乐于博客分享,业余时间喜欢跑步和科幻,希望与意趣相投朋友一起学习交流。
展开
-
Elasticsearch 响应数据压缩功能详解
压缩非常奇妙,可以将数据压缩比原始大小更小。我们知道WinRaR,7Zip等压缩工具。Elasticsearch也提供压缩数据功能,可实现对在客户端和服务端节点之间传输数据的压缩。压缩对于处理大数据传输时可减少网络延迟,本文主要内容包括:启用HTTP/TCP压缩,处理Elasticsearch不同版本的压缩的响应信息。启用HTTP/TCP压缩ES使得修改HTTP压缩非常容易,仅仅在 elasticsearch.yml文件中提供下面属性即可:http.compression: truehttp.com原创 2021-03-22 14:21:42 · 4333 阅读 · 5 评论 -
Elasticsearch中flattened字段类型
为了优化索引性能,需要统计索引的字段数量。Elasticsearch默认索引字段不能超过1000,由index.mapping.total_fields.limit参数进行设置。字段和对象映射,以及字段别名都计入这个限制。该值越大会导致内存不足和性能下降,特别在高负载的集群环境。实际应用mapping定义通常采用动态模板进行定义,那么如何统计索引中字段数量,以及如何解决字段数超过限制问题。统计索引中字段数量ES没有提供_stat统计字段API,下面介绍字段能力API,可以返回多个索引的字段信息:G原创 2021-03-02 17:55:47 · 1211 阅读 · 0 评论 -
详解Elasticsearch中 ‘store‘, ‘index‘ 属性和 ‘_all‘, ‘_source‘字段
本文介绍Elasticsearch中容易混淆的几个属性和字段。理解ES需要理解反向索引,即内存中的数据结构(如hash或map),其中存储所有分词和文档引用(不是整个文档,仅是包含该分词的文档引用)。之所以称为反向索引,是因为分词作为key,文档ID是值。正常索引(非反向索引)使用文档ID作为key,分词作为它包含的值。设置mapping中store选项它用于控制是否单独往索引中增加每个字段。上面示例展示每个字段设置store属性。store默认被禁用,启用的字段存储在stored_fields字段中。原创 2021-03-02 17:55:03 · 3174 阅读 · 0 评论 -
Elasticsearch快速初始化数据
设置分片和刷新间隔参数实际应用中需要给Elasticsearch初始化数据,当数据量比较大时我们希望能够快速载入。可以给索引设置两个参数。index.refresh_interval : 多长时间执行一次刷新操作,即使索引最近的更改在搜索中可见。缺省为1s,设置为-1则禁用刷新。index.number_of_replicas : 每个主分片的副本数量,默认为1。可以设置为0,即没有副本。上面两个参数设置可以更快索引,但短时间如果任何分片丢失会导致数据丢失的风险。因此,一旦初始化数据完成即刻设置回默原创 2021-02-28 21:35:49 · 2351 阅读 · 0 评论 -
释放Elasticsearch存储空间
Elasticsearch删除文档并没有真正删除,仅作了删除标记,从而不能再被搜索到。为了回收磁盘空间,需要_forcemergeAPI进行清理和优化。Force Merge API为了理解Force Merge API,我们需要大概了解Elasticsearch的底层架构Lucene。当往索引中插入文档时,文档被映射到一个或多个分片。每个分片有多个段组成,段可理解为针对特定数据集进行处理的迷你索引。Force Merge API通过合并段减少分片中段数量、删除冗余数据,优化Elasticsearch索原创 2021-02-27 16:34:22 · 3308 阅读 · 0 评论 -
利用Elaticsearch实现相关性分析
Elasticsearch 5.x及以上版本提供了特殊模块aggs-matrix-stats,自动计算几个字段的高级分析。Matrix stats 聚集matrix_stats聚集是基于文档中一组数值型自己计算聚集,主要包括下面信息:计算项描述count每个计算字段的样本数量.mean每个字段的平均值.variance每个字段方差,即偏离样本平均值的度量.skewness偏度,以均值为中心不对称分布程度.正态分布的偏度为0,两侧尾部长度对称。若以bs表示偏原创 2021-02-27 15:54:58 · 485 阅读 · 0 评论 -
Elasticsearch使用误区——key-value数据存储
本文描述Elasticsearch的错误使用场景——作为key-value数据存储。问题描述关系型数据库有严格的schema,每个独立业务需要分别按表进行存储。有时为了检索或统计方便,我们会把数据汇聚至Elasticsearch单个索引中,利用动态mapping技术,定义主要字段,从而实现灵活检索和统计分析类应用。但是当汇聚各类表时会造成Elasticsearch中索引的字段数量不受控制。当mapping不断扩展时,每个分片及索引会占用大量内存资源。正确姿势因为Elasticsearch索引缺省字段原创 2021-02-27 15:12:24 · 1467 阅读 · 0 评论 -
介绍Elasticsearch热点线程
有时Elasticsearch会由于cpu过度使用慢下来,我们需要检查原因。Elasticsearch提供监控热点线程的能力,可以方便查找问题具体与那些线程相关。热点线程(hot thread)java中定义热点线程为使用大量cpu并执行占用时间较长。我们可以Elasticsearch提供的api获取每个选择节点的热点线程。请求API地址:GET /_nodes/hot_threadsGET /_nodes/<node_id>/hot_threads该API在集群中每个选定节点上原创 2021-02-27 12:57:08 · 698 阅读 · 0 评论 -
Elasticsearch查询字符串语法教程
根据查询字符串进行查询,Elasticsearch使用严格语法进行解析。查询字符串基于操作符(如AND,OR)对提供的查询字符串进行分割、解析,接着对每一个分割文本进行分析,最后组合作为条件进行查询。1. 查询字符串介绍可以使用query_string查询创建复杂查询,包括通配符字符,跨多个字段查询等。功能非常强大,但如果提供的语法无效会返回错误。query_string示例如下:GET /_search{ "query": { "query_string": { "que原创 2021-02-13 22:21:20 · 2732 阅读 · 0 评论 -
Elaticsearch 更新文档示例
Elasticsearch提供了更新功能,包括单条更新和批量更新。1. 更新单个文档POST hockey/_update/1{ "script": { "lang": "painless", "source": "ctx._source.last = params.last", "params": { "last": "hockey" } }}2. 更新多个字段POST /seats/_update/3{ "script": {原创 2020-12-27 21:08:37 · 248 阅读 · 0 评论 -
Docker Compose搭建Elasticsearch 7.x和 Kibana 开发环境
利用Docker Compose可非常快搭建好开发所依赖的环境(如数据库,中间件),且可以很方便切换不同版本,大大降低学习新知识难度。本文带你快速搭建Elasticsearch的学习环境。1. 环境准备当然需要安装docker和docker compose。无论那类操作系统,网上安装文档非常多,这里不再赘述。2. 准备docker-compose.yml文件这里打算搭建简单的单机elasticsearch及kibana,也不涉及中文分词插件安装。新建一个文件夹docker-es,在里面新建文件,内容原创 2020-11-29 18:11:14 · 3928 阅读 · 2 评论 -
通过SQL访问Elasticsearch
Elasticsearch SQL是可以通过SQL方式查询Elasticsearch的组件。你能认为它是转换器,既能理解SQL,又能理解Elasticsearch,并利用Elasticsearch功能易于实现实时读取和处理数据。1. Elasticsearch SQL原生整合Elasticsearch SQL是为Elasticsearch官方提供,根据底层存储对相关节点有效地执行每个查询。无外部组件不需要额外的硬件,进程,运行时库去查询Elasticsearch;通过在Elasticsearch集原创 2020-11-29 17:32:30 · 396 阅读 · 0 评论 -
Elasticsearch 索引别名应用
Elasticsearch 索引别名应用Elasticsearch支持给索引增加别名,即可以给一个或多个索引增加一个别名。后续查询自动转换别名为实际索引名称。别名也可以和过滤器一起使用实现类似与视图功能,也可以定义路由别名避免不必要的共享操作。1. 语法POST /_aliases{ "actions" : [ { "add" : { "index" : "my-index-000001", "alias" : "alias1" } } ]}action : 数组类型,指定一组原创 2020-09-25 15:46:35 · 2151 阅读 · 1 评论 -
Elasticsearch 组合聚集(Composite aggregation)实现交叉分析
Elasticsearch 组合聚集(Composite aggregation)实现交叉分析实际分析应用中经常遇到需要交叉表的情况,它能够从不同维度组合分析业务。关系型数据库一般通过 group by 或 Pivot实现,很幸运,Elasticsearch也有类似功能。本文带你了解强大的组合分析,其中示例大多数来自官网。1. 认识组合聚集组合聚集(Composite aggregation) —— 从不同来源创建组合分组,属于多组聚集分析。与其他的多组聚集分析不同,它可以实现多聚集结果进行分页,其提原创 2020-08-25 17:25:58 · 6104 阅读 · 0 评论 -
Elasticsearch嵌套对象管理
Elasticsearch嵌套对象管理1. 索引包括嵌套对象、嵌套对象可以表达关系型数据库中一对多关系,同时增强检索能力。下面定义human索引包括cats嵌套对象,定义mapping:PUT human{ "mappings": { "properties": { "name": { "type": "text" }, "c...原创 2020-04-30 13:54:40 · 1182 阅读 · 0 评论 -
Elasticsearch 嵌套聚集与全局聚集
Elasticsearch 嵌套聚集与全局聚集本系列已经有好几篇关于聚集的内容,本文主要介绍嵌套聚集和全局聚集,为了文章完整性,也会先回顾下关键词聚集和子聚集。1. 准备数据为了演示,我们先准备模型和数据。1.1. 模型假设关于城市宠物注册的web应用,系统包括下列一些实体:City(city, type)Citizen(occupation,age)Pet(kind,name,...原创 2020-04-11 09:30:47 · 689 阅读 · 0 评论 -
学习Elasticsearch必需了解的十个概念
学习Elasticsearch必需了解的十个概念与学习其他数据库或语言一样,学习Elasticsearch首先需要掌握基本概念,理解这些基本概念会让你的学习曲线少些波折。虽然这些概念特别适用于Elasticsearch,但是在应用整个ELK Stack(Elasticsearch、Logstash 和 Kibana)时理解它们也很重要。为了更容易理解,我会把一些概念与关系数据库术语进行比较。1...原创 2020-04-10 08:46:37 · 432 阅读 · 0 评论 -
Elasticsearch动态映射与日期类型
Elasticsearch动态映射与日期类型JSon没有日期类型,但Elasticsearch能自动为我们映射日期字段。如果结合日期字段命名约定可以帮我我们准确实现动态映射。1. 动态映射Elasticsearch的动态映射特性可以实现根据字段值自动映射字段类型(缺省类型),因此无需显示定义如何索引、存储字段,Elasticsearch通过检查JSon属性的内容自动推断类型。请看示例:如果...原创 2020-04-05 11:29:55 · 2694 阅读 · 0 评论 -
Elasticsearch Painless获取当前时间
Elasticsearch Painless获取当前时间本文讨论下Elasticsearch如何获取当前时间,通常需要计算时间间隔时使用。日期处理Painless使用标准的Java库,主要类有:java.timejava.time.chronojava.time.formatjava.time.temporaljava.time.zone官方API地址为:https://www....原创 2020-03-29 21:27:52 · 9374 阅读 · 1 评论 -
Elasticsearch Script度量聚集教程
Elasticsearch Script度量聚集教程前面有两篇博文详细介绍了Elasticsearch的度量聚集。本文补充介绍脚本度量,实现使用脚本自定义逻辑提供度量输出。1. 语法介绍这里通过示例代码来说明:POST ledger/_search?size=0{ "aggs": { "profit": { "scripted_metric...原创 2020-03-28 13:27:14 · 1648 阅读 · 1 评论 -
Elasticsearch Painless Script入门教程
Elasticsearch Painless Script入门教程前面几篇文章已经陆续提到了Elasticsearch 脚本,但总感觉不够系统,本文带你系统地学习下Painless Script。Painless 脚本介绍自Elasticsearch 5.x 引入Painless,使得Elasticsearch拥有了安全、可靠、高性能脚本的解决方案。Painless是Elastic开发并做了...原创 2020-03-22 21:07:30 · 7724 阅读 · 3 评论 -
Elasticsearch脚本教程——计算日期生成分组
Elasticsearch脚本教程——计算日期生成分组本文我们一起通过实例实战Elasticsearch的Painless脚本。1. 概述本文环境为Elasticsearch 7.x版本,主要使用Painless脚本。需求说明:我们有日志数据,字段分别为name、start_date、close_date.现在需要计算两个日期之差并对结果进行分组。日期差以分钟为单位:* 0~30 分钟...原创 2020-03-22 15:09:11 · 3058 阅读 · 3 评论 -
介绍Elasticsearch排序上下文
介绍Elasticsearch排序上下文使用Painless脚本对查询文档进行排序,一般用于实现自定义的排序规则。1. 语法说明params (Map, read-only)用户定义参数,出入作为查询的一部分。doc (Map, read-only)包含当前文档的字段。对于单值字段通过doc[‘fieldname’].value方式访问;对于多值字段则返回第一个值,其他值可以通过索引...原创 2020-03-21 11:54:04 · 485 阅读 · 0 评论 -
介绍Jackson JsonParser解析json
介绍Jackson JsonParser解析json前文介绍了通过JsonNode解析json,本文深入底层工具JsonParser的用法。1. 概述实际应用中经常需要解析json数据,如查询NoSql数据库时响应数据格式通常为Json格式。JsonNode可以非常方便地实现,JsonParser类是底层JSon解析器,类似于Java使用stAx解析xml,但JsonParser仅仅解析Js...原创 2020-03-14 16:39:08 · 14959 阅读 · 1 评论 -
深入Elasticsearch度量聚集(2)
深入Elasticsearch度量聚集(2)本文接着前文继续讲解Elasticsearch的度量聚集。主要包括geo bounds, geo centroid, percentiles, percentile ranks等单值和多值聚集。学习完这两篇博文,应该能很好地理解elasticsearch的度量聚集。示例数据还是使用上文的数据,读者可以下载并在本地搭建好测试环境。1. 地理位置1.1...原创 2020-02-27 16:08:56 · 649 阅读 · 0 评论 -
深入Elasticsearch度量聚集(1)
深入Elasticsearch度量聚集(1)本文主要聚集elasticsearch的数值类型度量聚集,主要有两种类型,一种生成单值聚集,另一个生成多值聚集。单值度量聚集主要有平均数、加权平均数,最小值、最大值以及基数。多值聚集包括统计聚集、扩展统计聚集。1. 环境准备为了演示上述度量聚集,我们需要创建sports索引,并存储一些文档。读者可以在这里下载,批量插入文档操作可以参考前文。索引数据...原创 2020-02-26 18:10:34 · 586 阅读 · 0 评论 -
深入理解 significant terms 和 significant text 分组聚集
深入理解 significant terms 和 significant text 分组聚集本文我们学习significant terms 和 significant text 聚集。它们目的是搜索数据集中有趣的和/或不寻常的词汇,这些词汇可以告诉你很多关于数据隐藏属性的信息。应用场景主要有:根据用户查询包括的同义词、缩写词标识相关文档。举例,显著关键词(significant terms...原创 2020-02-23 21:07:19 · 2143 阅读 · 4 评论 -
深入理解Elasticsearch Pipeline聚集(2)
深入理解Elasticsearch Pipeline聚集(2)在前文中我们讨论管道聚集的结构,带你学习了几个典型的管道聚集类型:导数、累加求和等。本文我们继续讨论管道聚集分析,主要包括统计、移动平均、移动函数、百分位、分组排序以及分组脚本等。示例数据仍然使用上文中的数据,这里不再说明。1. 统计管道聚集在度量聚集中,统计聚集计算索引中数值类型的统计指标,包括最小、最大、平均、求和以及次数。...原创 2020-02-21 22:01:05 · 513 阅读 · 0 评论 -
深入理解Elasticsearch Pipeline聚集(1)
深入理解Elasticsearch Pipeline聚集(1)度量聚集和桶聚集一般用于文档中的数值型字段,而本文讨论的管道聚集针对其他聚集产生的输出值,因此管道聚集是针对中间值而不是原始文档数据。对于及时复杂统计和数学度量,如累加和、导数(变化情况)、移动平均等非常有用。本文讨论管道聚集的两个基本类型,通过示例展示常用的管道聚集,如求和、累加求和、最小值、最大值、平均值以及导数等管道聚集。1...原创 2020-02-19 16:20:18 · 842 阅读 · 0 评论 -
Elasticsearch聚合分析实战(2)
Elasticsearch聚合分析实战(2)本文在前文基础上进一步通过学习度量分析和分组分析。示例数据可以点击这里下载。环境准备系统中提供1000条employee数据,读者可以通过POST /employees/_bulk命令批量插入至elasticsearch中。执行 GET /_cat/indices?v 命名验证employees索引是否创建成功。yellow open em...原创 2020-02-15 11:07:38 · 315 阅读 · 0 评论 -
详解Elasticsearch Query DSL
详解Elasticsearch Query DSLElasticsearch是目前的首选搜索、分析引擎,但要熟练掌握查询DSL着实不易。本文在前文的基础上进一步深入学习。1. 精确检索 vs 全文检索Elasticsearch中所有检索主要可分为三类:精确检索全文检索两者组合检索(简称组合检索)文档字段可分为两类:精确文本(keyword)和分析文本(text,也称为全文本)。精...原创 2020-02-14 20:16:09 · 1044 阅读 · 1 评论 -
Elasticsearch聚合分析实战(1)
Elasticsearch聚合分析实战(1)本文通过实际示例学习Elasticsearch的聚集分析。1. 聚集分析介绍聚集分析主要包括两大类,度量聚集(metrics aggregation)和分组聚集(bucket aggregation),其他类型本文暂不涉及。度量聚集基于文档集合计算一些值(如平均值);分组聚集根据分组条件对文档进行分组。1.1. 示例分析数据定义sport是索...原创 2020-02-13 16:56:48 · 361 阅读 · 0 评论 -
Elasticsearch Scripting 教程
Elasticsearch Scripting 教程Elasticsearch中最强大、有用的功能可能是其 Scripting 功能。通过脚本功能可以执行多种操作,如获取搜索请求的特定字段,修改、删除字段。本文学习如果通过脚本功能实现这些基本功能。1. Elasticsearch Scripting介绍Elasticsearch使用Painless或Java创建自定义表达式脚本。在5.x版本...原创 2020-02-12 21:30:47 · 755 阅读 · 0 评论 -
Elasticsearch Query DSL:查询上下文和过滤上下文
Elasticsearch Query DSL:查询上下文和过滤上下文Elasticsearch提供非常完善基于JSON的Query DSL(Domain Specific Language)用于定义查询。主要包括查询上下文即过滤上下文,以及两者组合查询。1. 查询上下文在查询上下文中使用的查询子句基于文档相关性原则进行查询,用于回答“文档匹配查询子句的程度”。查询结果列出所有相关文档并按照...原创 2020-02-12 14:26:32 · 1977 阅读 · 0 评论 -
Elasticsearch Rest API介绍
Elasticsearch Rest API介绍Elasticsearch提供了大量的REST api来集成、查询和管理数据。在这篇博客中讨论一些经常使用的REST api。1. 概述Elasticsearch REST APIs 主要实现下列功能:检查集群、节点、索引的健康状况、状态以及统计信息等.管理集群、节点、索引数据以及元数据.执行CRUD操作 (Create, Read, ...原创 2019-11-21 17:38:28 · 537 阅读 · 0 评论 -
elasticsearch查询模板示例
elasticsearch查询模板示例elasticsearch的查询模板功能非常强大,可以参数化复杂查询,对于定义用户应用场景非常有帮助。本文记录一个项目中的示例,希望对你有帮助。1. 需求描述统计用户在单位时间内用户数,对于重复用户事务只能计算一次。事件索引包括3个字段,user_id, user_name和create_time:-POST /$ES/event_index{...原创 2019-11-10 21:17:24 · 2692 阅读 · 0 评论 -
Hibernate Search 教程
Hibernate Search 教程本文我们讨论Hibernate Search 基础知识、配置及查询搜索功能。如果我们已经在ORM中使用Hibernate和JPA,那么离Hibernate Search只有一步之遥。Hibernate Search集成了Apache Lucene,一个高性能、可扩展的全文检索引擎。其结合了Lucene的强大功能和Hibernate和JPA的简单性,因此仅需...原创 2019-11-10 15:55:06 · 3495 阅读 · 0 评论 -
Lucene 快速入门
Lucene 快速入门Apache Lucene 是一个全文搜索引擎,可以在多种编程语言中应用。本文尝试介绍其核心库的概念并创建一个简单示例。gradle 依赖首先解决依赖,读者可以在maven仓库中引用最新版本。 compile "org.apache.lucene:lucene-core:7.2.1" compile "org.apache.lucene:...原创 2018-03-27 21:54:14 · 578 阅读 · 0 评论 -
使用Elasticsearch搜索模板简化查询
使用Elasticsearch搜索模板简化查询本文介绍Elasticsearch搜索模板,如何定义搜索模板、调用搜索模板,并通过示例进行说明。1. 管理Elasticsearch搜索模板Elasticsearch搜索模板与关系型数据库的存储过程类似。实际就是带变量的查询(使用Mustache模板语言),实际查询时使用模板参数替换变量。下面示例定义搜索模板:POST _scripts/&l...原创 2019-10-30 12:49:17 · 1253 阅读 · 0 评论 -
Elasticsearch聚合教程
Elasticsearch聚合教程虽然Elasticsearch不是关系型数据库,但也可以对查询结果进行聚合,尤其需要对文档进行分组统计分析是非常有用。本文主要介绍Elasticsearch的聚合特性。首先介绍聚合主要概念,如分组和度量。然后描述一些主要聚合类型,最后展示如何通过Java API进行实现。1 分组和度量Elasticsearch中聚合主要基于两个概念:分组(buckets)...原创 2019-10-25 12:39:55 · 1026 阅读 · 0 评论