Elasticsearch
Mr_慕白
此用户不懒
展开
-
ES Fielddata
一、简介在ES中,text类型的字段使用一种叫做fielddata的查询时内存数据结构。当字段被排序,聚合或者通过脚本访问时这种数据结构会被创建。它是通过从磁盘读取每个段的整个反向索引来构建的,然后存存储在java的堆内存中。fileddata默认是不开启的。Fielddata可能会消耗大量的堆空间,尤其是在加载高基数文本字段时。一旦fielddata已加载到堆中,它将在该段的生命周期内保留。此外,加载fielddata是一个昂贵的过程,可能会导致用户遇到延迟命中。这就是默认情况下禁用fielddata原创 2020-05-22 11:11:54 · 3252 阅读 · 0 评论 -
ES基于completion suggest实现搜索提示
下面说说在es中的种实现搜索提示的功能,基于completion suggest 进行实现,其在实际应用中搜索性能更加高效。假如文档库里有一堆关于大话西游的,比如,“大话西游电影”,“大话西游小说”,"大话西游舞台剧"等,这里我们需要搜索以"大话西游"开头的文档。1、自定义index,及字段分词属性,这里用IK中文分词器:PUT /news_website{ "mappings": { "news" : { "properties" : { "title" .转载 2020-05-21 13:50:55 · 3299 阅读 · 2 评论 -
ES嵌套对象和父子文档
1.join 简介在 ES 中有一种特殊的数据类型『join』,被形象地称为父子文档。它是一种可以在同一索引中存放两种有关系数据的数据类型,类似于关系数据库中让两张表发生关系的外键 FOREIGN KEY 。在官方文档中这样介绍:join 数据类型的字段是一个特殊字段,它可以在同一个索引的文档中创建 父子关系 。通过参数 relations 定义可能存在关系的一组文档,这个关系的参数由 父名 和 子名 构成。2.定义我们需要在设置 mapping 时将其关系定义好,如下示例:PUT 索引名称{转载 2020-05-19 20:50:36 · 1364 阅读 · 0 评论 -
ES索引存储原理
ES索引存储原理不变性写到磁盘的倒序索引是不变的:自从写到磁盘就再也不变。这会有很多好处:不需要添加锁。不存在写操作,因此不存在多线程更改数据。提高读性能。一旦索引被内核的文件系统做了Cache,绝大多数的读操作会直接从内存而不需要经过磁盘。提升其他缓存(例如fiter cache)的性能。其他的缓存在该索引的生命周期内保持有效,减少磁盘I/O和计算消耗。当然,索引的不变性也有缺点。如果你想让新修改过的文档可以被搜索到,你必须重新构建整个索引。这在一个index可以容纳的数据量和一个索引可转载 2020-05-14 15:57:07 · 407 阅读 · 0 评论 -
深度分页问题
深度分页es为了性能,限制了我们分页的深度,es目前支持的最大的 max_result_window = 10000;也就是说我们不能分页到10000条数据以上。from + size 这种方式不适用于深度分页场景,下面介绍其它两种分页方式:• Search After• Scroll Apifrom + size的分页方式虽然是最灵活的分页方式,但是当分页深度达到一定程度将会产生深度分页的问题。scroll如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询原创 2020-05-13 15:59:04 · 1288 阅读 · 0 评论 -
bouncing results问题
一、bouncing results成因及解决方案bouncing results问题,两个document排序,field值相同;不同的shard上,可能排序不同;每次请求轮询路由到不同的replica shard上;每次页面上看到的搜索结果的排序都不一样。这就是bouncing result的问题,这个问题出现最多的地方就是timestamp进行排序比如当你使用一个timestamp字段对结果进行排序,因为es中时间格式为%Y-%m-%d,那么同样时间的数据会有很多。es如果不做任何设置,将会按ro原创 2020-05-13 15:45:32 · 468 阅读 · 0 评论 -
正排索引(doc values)
doc values搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values。在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os会将其写入磁盘上倒排:doc1: hello world you a原创 2020-05-13 14:55:49 · 1205 阅读 · 0 评论 -
图解Elasticsearch中的_source、_all、store和index属性
https://blog.csdn.net/napoay/article/details/62233031转载 2020-05-12 20:21:08 · 212 阅读 · 0 评论 -
Elasticsearch存储深入详解
https://blog.csdn.net/laoyang360/article/details/82559729转载 2020-05-11 16:12:57 · 213 阅读 · 0 评论 -
ES多种搜索方式总结
本节使用的是ES低版本,包含type。分类query string searchquery DSLquery filterfull-text searchphrase searchhighlight search1、query string search搜索全部商品:GET /ecommerce/product/_searchtook:耗费了几毫秒timed_out:...原创 2020-04-29 11:01:39 · 1244 阅读 · 0 评论 -
Delete/Update by query
一、引言之前介绍的文档删除与更新(ES的更新是重建->删除->重新索引)只能通过_id,但这不符合我们的使用场景,我们更希望能够像数据库那样通过条件进行删除/更新。通过Delete/Update by query这两个API可以做到这点,对指定查询匹配的文档进行删除/更新。之前在 2.X版本里 这个功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装插件。那么在5.x...原创 2020-04-28 15:32:16 · 333 阅读 · 0 评论 -
干货 | Elasticsearch开发人员最佳实战指南
https://hiddenpps.blog.csdn.net/article/details/105424222转载 2020-04-28 10:17:23 · 151 阅读 · 0 评论 -
精确值 VS 全文
精确值 VS 全文当摆弄索引里面的数据时,我们发现一些奇怪的事情。一些事情看起来被打乱了:在我们的索引中有12条推文,其中只有一条包含日期 2014-09-15 ,但是看一看下面查询命中的 总数 (total):GET /_search?q=2014 # 12 resultsGET /_search?q=2014-09-15 # 12 results ...原创 2020-04-27 18:09:55 · 290 阅读 · 0 评论 -
Elasticsearch查询
一、简介Elasticsearch提供了基于JSON的完整查询DSL(特定于域的语言)来定义查询。 将查询DSL视为查询的AST(抽象语法树),它由两种子句组成:叶子查询子句叶子查询子句在特定字段中查找特定值,例如match,term或range查询。 这些查询可以自己使用。复合查询子句复合查询子句包装其他叶查询或复合查询,并用于以逻辑方式组合多个查询(例如bool或dis_max查询...原创 2020-04-27 16:17:10 · 388 阅读 · 0 评论 -
Elasticsearch词汇解释
term 索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值。foo,Foo Foo几个单词是不相同的索引词。索引词(term)是可以通过term查询进行准确的搜索。text 文本是一段普通的非结构化文字,通常,文本会被分析称一个个的索引词,存储在elasticsearch的索引库中,为了让文本能够进行搜索,文本字段需要事先进行分析;当对文本中的关键词进行查...原创 2020-04-27 10:33:17 · 236 阅读 · 0 评论 -
Elasticseach重要的配置
重要的Elasticsearch配置Elasticseach配置的配置项很多,前面几篇文档仅仅翻译了一部分,其他的配置参见官网。本篇重点介绍重要的Elasticsearch配置。虽然ElasticSearch只需要很少的配置,但在投入生产之前需要考虑一些设置。在开始生产之前,必须考虑以下设置:路径设置节点名字集群名字网络主机发现设置堆大小堆转储路径...翻译 2020-04-26 21:20:48 · 274 阅读 · 0 评论 -
Elasticseach配置
一、简介ElasticSearch具有良好的默认值,只需要很少的配置。可以使用Cluster Update Settings在正在运行的群集上更改大多数设置。配置文件应包含特定于节点的设置(如node.name和路径),或节点为了能够加入群集而需要的设置(如cluster.name和network.host)。1.1、配置文件位置ElasticSearch有三个配置文件:使用Elast...翻译 2020-04-26 18:31:37 · 200 阅读 · 0 评论 -
ES相关性(_score)
什么是相关性?我们曾经讲过,默认情况下,返回结果是按相关性倒序排列的。 但是什么是相关性? 相关性如何计算?每个文档都有相关性评分,用一个正浮点数字段 _score 来表示 。 _score 的评分越高,相关性越高。查询语句会为每个文档生成一个 _score 字段。评分的计算方式取决于查询类型 不同的查询语句用于不同的目的: fuzzy 查询会计算与关键词的拼写相似程度,terms 查询会计...原创 2020-04-26 16:46:53 · 4005 阅读 · 0 评论 -
ES排序
排序为了按照相关性来排序,需要将相关性表示为一个数值。在 Elasticsearch 中, 相关性得分 由一个浮点数进行表示,并在搜索结果中通过 _score 参数返回, 默认排序是 _score 降序。有时,相关性评分对你来说并没有意义。例如,下面的查询返回所有 user_id 字段包含 1 的结果:GET /_search{ "query" : { "bool...原创 2020-04-26 15:52:50 · 7731 阅读 · 0 评论 -
ES查询与过滤对比
查询与过滤Elasticsearch 使用的查询语言(DSL)拥有一套查询组件,这些组件可以以无限组合的方式进行搭配。这套组件可以在以下两种情况下使用:过滤情况(filtering context)和查询情况(query context)。当使用于 过滤情况 时,查询被设置成一个“不评分”或者“过滤”查询。即,这个查询只是简单的问一个问题:“这篇文档是否匹配?”。回答也是非常的简单,yes ...原创 2020-04-26 14:31:59 · 1039 阅读 · 0 评论 -
Elasticsearch分析与分析器
分析与分析器分析 包含下面的过程:首先,将一块文本分成适合于倒排索引的独立的 词条 ;之后,将这些词条统一化为标准格式以提高它们的“可搜索性”,或者 recall。分析器执行上面的工作。 分析器 实际上是将三个功能封装到了一个包里:字符过滤器首先,字符串按顺序通过每个 字符过滤器 。他们的任务是在分词前整理字符串。一个字符过滤器可以用来去掉HTML,或者将 & 转化成 a...原创 2020-04-26 10:29:40 · 164 阅读 · 0 评论 -
_all 字段
_all 字段这个简单搜索返回包含 mary 的所有文档:GET /_search?q=mary之前的例子中,我们在 tweet 和 name 字段中搜索内容。然而,这个查询的结果在三个地方提到了 mary :有一个用户叫做 Mary6条微博发自 Mary一条微博直接 @maryElasticsearch 是如何在三个不同的字段中查找到结果的呢?当索引一个文档的时候,Elas...原创 2020-04-26 10:13:03 · 334 阅读 · 0 评论 -
Elasticsearch倒排索引
倒排索引Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。例如,假设我们有两个文档,每个文档的 content 域包含如下内容:1、The quick brown fox jumped over the lazy dog2、Quick brown foxes leap ov...原创 2020-04-25 22:26:27 · 353 阅读 · 0 评论 -
Elasticsearch映射_mapping
映射和分析当摆弄索引里面的数据时,我们发现一些奇怪的事情。一些事情看起来被打乱了:在我们的索引中有12条推文,其中只有一条包含日期 2014-09-15 ,但是看一看下面查询命中的 总数 (total):GET /_search?q=2014 # 12 resultsGET /_search?q=2014-09-15 # 12 results !GE...原创 2020-04-24 17:43:58 · 225 阅读 · 0 评论 -
ES搜索--轻量搜索语法
一、引言现在,我们已经学会了如何使用 Elasticsearch 作为一个简单的 NoSQL 风格的分布式文档存储系统。我们可以将一个 JSON 文档扔到 Elasticsearch 里,然后根据 ID 检索。但 Elasticsearch 真正强大之处在于可以从无规律的数据中找出有意义的信息——从“大数据”到“大信息”。Elasticsearch 不只会_存储(stores)_ 文档,为了能...原创 2020-04-24 16:07:22 · 1374 阅读 · 0 评论 -
ES批量操作
一、引言与 mget 可以使我们一次取回多个文档同样的方式, bulk API 允许在单个步骤中进行多次 create 、 index 、 update 或 delete 请求。 如果你需要索引一个数据流比如日志事件,它可以排队和索引数百或数千批次。在单个API调用中执行多个批量操作。 这样可以减少开销,并可以大大提高索引速度。二、bulk API2.1、语法POST _bulk{ "...原创 2020-04-24 13:48:29 · 1022 阅读 · 0 评论 -
ES 索引文档,按_id查找、更新、删除文档
一、索引(新建)文档通过使用 index API ,文档可以被 索引 —— 存储和使文档可被搜索。 但是首先,我们要确定文档的位置。正如我们刚刚讨论的,一个文档的 _index 、 _type 和 _id 唯一标识一个文档。我们可以提供自定义的 _id 值,或者让 index API 自动生成。1.1、自定义_id#语法:PUT /{index}/{type}/{id}{ "fie...原创 2020-04-23 14:53:38 · 32925 阅读 · 3 评论 -
索引基本操作
索引基本操作创建索引PUT /customer?pretty使用PUT的方式创建一个为“customer”的索引。我们只需在末尾加上“pretty”来告诉Elasticsearch,做JSON格式化输出:{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "customer"}查询索引GET...原创 2020-04-23 11:04:01 · 253 阅读 · 0 评论 -
Elasticsearch---cat APIs
一、介绍如果经常在命令行环境下工作,cat API 对你会非常有用。用 Linux 的 cat 命令命名,这些 API 也就设计成像unix 命令行工具一样工作了。他们提供的统计和前面已经讨论过的 API ( 健康、节点统计 等等 ) 是一样的。但是输出以表格的形式提供,而不是 JSON。对于系统管理员来说这是 非常方便的,你仅仅想浏览一遍集群或者找出内存使用偏高的节点而已。通过 GET 请...原创 2020-04-22 22:16:19 · 659 阅读 · 0 评论 -
Elasticsearch---cat命令公共参数
群集运行状况我们将使用curl来实现查看集群的运行情况,但您可以使用任何允许您进行HTTP/REST调用的工具。假设我们仍然在启动ElasticSearch并打开另一个命令shell窗口的同一个节点上。为了检查集群的运行状况,我们将使用_cat API。您可以在Kibana的控制台中运行下面的命令,或者使用curl。GET /_cat/health?v完整API请求地址curl -X ...原创 2020-04-22 19:51:05 · 1182 阅读 · 0 评论 -
使用 curl 和 Elasticsearch 进行通信
一、引言所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上,正如你所看到的,你甚至可以使用 curl 命令来和 Elasticsearch 交互。二、Elasticsearch 请求一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的...原创 2020-04-22 17:00:40 · 313 阅读 · 0 评论 -
Elasticsearch客户端
Java REST Client :Java Low Level REST Client :用于Elasticsearch的官方低级客户端。它允许通过http与Elasticsearch集群通信。将请求编排和响应反编排留给用户自己处理。它兼容所有的Elasticsearch版本。(PS:学过WebService的话,对编排与反编排这个概念应该不陌生。可以理解为对请求参数的封装,以及对响应结果...原创 2020-04-22 16:03:55 · 608 阅读 · 0 评论 -
Kibana安装与使用
一、Kibana介绍Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。比HEAD插件要方面直观.你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。Kibana 的使用场景,应该集中在两方面:实时监控通过 histogram 面板,配...原创 2020-04-22 11:10:10 · 2041 阅读 · 0 评论 -
Elasticsearch安装与运行
一、下载安装 Elasticsearch 之前,你需要先安装一个较新的版本的 Java,jdk1.8以上。官网下载所需的版本:https://www.elastic.co/cn/downloads/elasticsearch本文所下载的是7.5.1版本。Elasticsearch7.x版本程序包默认打包jdk: 以至于7.x版本的程序包大小突然边300MB+ 对比6.x发现,包大了200M...原创 2020-04-21 21:06:30 · 460 阅读 · 0 评论 -
Elasticsearch基本概念
一、引言全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必...原创 2020-04-21 19:27:32 · 149 阅读 · 0 评论