elasticsearch
文章平均质量分 73
elasticsearch 安装、使用、优化教程
gmHappy
从不敢夜郎自大,但也不至于妄自菲薄,只是想做一个靠本事吃饭的手艺人
展开
-
Elasticsearch 实现索引抽样查询
需求对索引中的数据随机抽样DSL实现通过采样script脚本排序的方式进行实现{ "from": 0, "size": 20, "timeout": "60s", "query": { "match_all": { "boost": 1 } }, "sort": [ { "_script": { "script": { "source": "Math.random()",原创 2021-01-27 11:21:56 · 1350 阅读 · 0 评论 -
Elasticsearch 实现类似SQL语句中like %关键字% 的单纯模糊查询(不进行分词)
一、前言1.1 需求描述用Elasticsearch 实现类似SQL中like的功能('%aaa%'),查询数据时,要前后模糊匹配,不要分词(用户输入AAA,检索的结果中AAA需要连在一起,不能是AABA)1.2 所需知识点1.2.1 phrase-matchingphrase-matching 短语匹配 类似 match 查询, match_phrase 查询首先将查询字符串解析成一个词项列表,然后对这些词项进行搜索,但只保留那些包含全部搜索词项,且位置与搜索词项相同的文档。 比如对于quick原创 2021-01-05 19:06:00 · 10645 阅读 · 0 评论 -
ElasticSearch docker-compose集群部署、插件安装、开启安全认证
docker exec -it es01 /bin/bash/usr/share/elasticsearch/bin/elasticsearch-certutil ca/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 -out /usr/share/elasticsearch/config/elastic-certificates.p12 -pass原创 2020-12-18 13:56:08 · 924 阅读 · 0 评论 -
ElasticSearch docker-compose集群部署
一、前言Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。二、docker-compose安装2.1 pip方式安装pip install docker-compose 2.2 查看版本docker-compose version三、集群架构3.1 结构图及解释Master节点作为Master节点与协调节点,为防原创 2020-12-17 14:48:17 · 1076 阅读 · 2 评论 -
ElasticSearch docker单机部署及常用插件安装
一、部署ElasticSearch1.1 拉取镜像docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.31.2 运行容器ElasticSearch的默认端口是9200,我们把宿主环境9200端口映射到Docker容器中的9200端口,就可以访问到Docker容器中的ElasticSearch服务了,同时我们把这个容器命名为es。docker run -d --name es -p 9200:9200 -p 9300:9300原创 2020-12-16 16:02:46 · 565 阅读 · 1 评论 -
elasticsearch 基础 —— ReIndex
Reindex会将一个索引的数据复制到另一个已存在的索引,但是并不会复制原索引的mapping(映射)、shard(分片)、replicas(副本)等配置信息。一、reindex的常用操作1、reindex基础实现 _reindex会将一个索引的快照数据copy到另一个索引,默认情况下存在相同的_id会进行覆盖(一般不会发生,除非是将两个索引的数据copy到一个索引中),可以使用...原创 2018-09-17 11:34:34 · 23354 阅读 · 5 评论 -
elasticsearch 基础 —— URI搜索
URI搜索可以通过提供请求参数使用URI来执行搜索请求。使用此模式执行搜索时,并非所有搜索选项都会暴露。这是一个例子:GET twitter/_search?q=user:kimchy示例响应:{ "timed_out": false, "took": 62, "_shards":{ "total" : 1, "succe...原创 2018-09-17 16:21:39 · 3471 阅读 · 2 评论 -
elasticsearch 深入 —— Post Filter后置过滤器
过滤查询以及聚合A natural extension to aggregation scoping is filtering. Because the aggregation operates in the context of the query scope, any filter applied to the query will also apply to the aggregatio...原创 2018-09-17 16:28:59 · 8675 阅读 · 2 评论 -
elasticsearch 深入 —— Search Type检索类型
在此我们再给出那个查询的代码:$ curl -XGET localhost:9200/startswith/test/_search?pretty -d '{ "query": { "match_phrase_prefix": { "title": { "query": "d", "ma.原创 2018-09-18 08:43:17 · 5368 阅读 · 0 评论 -
elasticsearch 深入 —— Scroll滚动查询
Scrollsearch 请求返回一个单一的结果“页”,而 scroll API 可以被用来检索大量的结果(甚至所有的结果),就像在传统数据库中使用的游标 cursor。滚动并不是为了实时的用户响应,而是为了处理大量的数据,例如,为了使用不同的配置来重新索引一个 index 到另一个 index 中去。client 支持:Perl 和 Python注意:从 scroll 请求返...原创 2018-09-18 09:19:03 · 25408 阅读 · 0 评论 -
elasticsearch 深入 —— Search After实时滚动查询
Search After一般的分页需求我们可以使用form和size的方式实现,但是这种分页方式在深度分页的场景下应该是要避免使用的。深度分页会随着请求的页次增加,所消耗的内存和时间的增长也是成比例的增加,为了避免深度分页产生的问题,elasticsearch从2.0版本开始,增加了一个限制:index.max_result_window =10000建议使用Scroll api进行...原创 2018-09-18 11:22:33 · 35227 阅读 · 5 评论 -
elasticsearch 基础 —— Explain、Version、min_score、query rescorer
Explain相关度得分计算:GET /_search{ "explain": true, "query" : { "term" : { "user" : "kimchy" } }}Version返回每个搜索命中的版本:GET /_search{ "version": true, "query&原创 2018-09-18 14:47:30 · 7183 阅读 · 0 评论 -
elasticsearch 基础 —— Field Collapsing字段折叠
允许根据字段值折叠搜索结果。通过按折叠键选择顶部排序文档来完成折叠。例如,下面的查询检索每个用户的最佳推文,并按喜欢的数量对它们进行排序。GET /twitter/_search{ "query": { "match": { "message": "elasticsearch" } }, "collapse" ...原创 2018-09-18 16:20:42 · 15040 阅读 · 5 评论 -
elasticsearch 基础 —— Inner hits
Inner hitsThe parent-join and nested 功能允许返回具有不同范围匹配的文档。在父/子案例中,基于子文档中的匹配返回父文档,或者基于父文档中的匹配返回子文档。在嵌套的情况下,基于嵌套内部对象中的匹配返回文档。 在这两种情况下,隐藏了导致文档返回的不同范围中的实际匹配。在许多情况下,知道哪些内部嵌套对象(在嵌套的情况下)或子/父文档(在父/子的情况下)返回某些信息...原创 2018-09-18 17:15:25 · 12176 阅读 · 0 评论 -
elasticsearch 基础 —— _mget取回多个文档及_bulk批量操作
取回多个文档Elasticsearch 的速度已经很快了,但甚至能更快。 将多个请求合并成一个,避免单独处理每个请求花费的网络延时和开销。 如果你需要从 Elasticsearch 检索很多文档,那么使用 multi-get 或者 mget API 来将这些检索请求放在一个请求中,将比逐个文档请求更快地检索到全部文档。mget API 要求有一个 docs 数组作为参数,每个 元素包含需要...原创 2018-09-11 12:24:13 · 3127 阅读 · 0 评论 -
elasticsearch 基础 —— 分布式文档存储原理
路由一个文档到一个分片中当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢?首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个公式决定的:shard = hash(routing) % ...原创 2018-09-11 14:21:07 · 2797 阅读 · 0 评论 -
elasticsearch 基础 —— 请求体查询
请求体查询简易 查询 —query-string search— 对于用命令行进行即席查询(ad-hoc)是非常有用的。 然而,为了充分利用查询的强大功能,你应该使用 请求体 search API, 之所以称之为请求体查询(Full-Body Search),因为大部分参数是通过 Http 请求体而非查询字符串来传递的。请求体查询 —下文简称 查询—不仅可以处理自身的查询请求,还允许你对结...原创 2018-09-12 09:38:56 · 2655 阅读 · 0 评论 -
elasticsearch 深入 —— 结构化搜索
结构化搜索结构化搜索(Structured search) 是指有关探询那些具有内在结构数据的过程。比如日期、时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作。比较常见的操作包括比较数字或时间的范围,或判定两个值的大小。文本也可以是结构化的。如彩色笔可以有离散的颜色集合: 红(red) 、 绿(green) 、 蓝(blue) 。一个博客可能被标记了关键词 分布式(...原创 2018-09-12 14:30:41 · 3746 阅读 · 0 评论 -
elasticsearch 深入 —— 全文检索
全文搜索我们已经介绍了搜索结构化数据的简单应用示例,现在来探寻 全文搜索(full-text search) :怎样在全文字段中搜索到最相关的文档。全文搜索两个最重要的方面是:相关性(Relevance)它是评价查询与其结果间的相关程度,并根据这种相关程度对结果排名的一种能力,这种计算方式可以是 TF/IDF 方法(参见 相关性的介绍)、地理位置邻近、模糊相似,或其他的某些算法。...原创 2018-09-12 16:13:43 · 6401 阅读 · 0 评论 -
elasticsearch 深入 —— 近似匹配
近似匹配使用 TF/IDF 的标准全文检索将文档或者文档中的字段作一大袋的词语处理。 match 查询可以告知我们这大袋子中是否包含查询的词条,但却无法告知词语之间的关系。思考下面这几个句子的不同:Sue ate the alligator. The alligator ate Sue. Sue never goes anywhere without her alligator-s...原创 2018-09-13 10:44:45 · 3757 阅读 · 0 评论 -
elasticsearch 深入 —— 相关度控制
控制相关度处理结构化数据(比如:时间、数字、字符串、枚举)的数据库, 只需检查文档(或关系数据库里的行)是否与查询匹配。布尔的是/非匹配是全文搜索的基础,但不止如此,我们还要知道每个文档与查询的相关度,在全文搜索引擎中不仅需要找到匹配的文档,还需根据它们相关度的高低进行排序。全文相关的公式或 相似算法(similarity algorithms) 会将多个因素合并起来,为每个文档生成一...原创 2018-09-13 13:56:02 · 2983 阅读 · 0 评论 -
elasticsearch 深入 —— 地理位置
地理位置我们拿着纸质地图漫步城市的日子一去不返了。得益于智能手机,我们现在总是可以知道 自己所处的准确位置,也预料到网站会使用这些信息。我想知道从当前位置步行 5 分钟内可到的那些餐馆,对伦敦更大范围内的其他餐馆并不感兴趣。但地理位置功能仅仅是 Elasticsearch 的冰山一角,Elasticsearch 的妙处在于,它让你可以把地理位置、全文搜索、结构化搜索和分析结合到一起。例...原创 2018-09-13 15:39:59 · 6833 阅读 · 0 评论 -
elasticsearch 基础 —— Get API
Get APIget API允许根据其id从索引中获取指定类型的JSON文档。以下示例从名为twitter的索引获取JSON文档,该索引类型名为_doc,id值为0:GET twitter/_doc/0上述get操作的结果是:{ "_index" : "twitter", "_type" : "_doc", "_id" : "0", &q原创 2018-09-14 11:08:31 · 3679 阅读 · 0 评论 -
elasticsearch 基础 —— Delete By Query API
Delete By Query API_delete_by_query 的简单用法,就是在查询匹配到的每个文档上执行删除。例如:POST twitter/_delete_by_query{ "query": { ① "match": { "message": "some message" } }}①:查询必须是有效的键值对,query是键,这...原创 2018-09-14 14:36:36 · 7900 阅读 · 0 评论 -
elasticsearch 基础 —— Update API
Update API更新API允许基于提供的脚本更新文档。该操作从索引获取文档(与分片并置),运行脚本(使用可选的脚本语言和参数),并对结果进行索引(也允许删除或忽略操作)。它使用版本控制来确保在“get”和“reindex”期间没有发生更新。请注意,此操作仍然意味着文档的完全重新索引,它只是删除了一些网络往返,并减少了get和索引之间版本冲突的可能性。_source需要启用该字段才能使此...原创 2018-09-14 15:30:05 · 4541 阅读 · 1 评论 -
elasticsearch 基础 —— Parent-Child 父子关系(5.X老版本)
ElasticSearch 中的Parent-Child关系和nested模型是相似的, 两个都可以用于复杂的数据结构中,区别是 nested 类型的文档是把所有的实体聚合到一个文档中而Parent-Child现对于比较独立,每个实体即为一个文档Parent-Child 优点1、父文档更新时不用重新为子文档建立索引2、子文档的增加、修改、删除是对父文档和其他子文档没有任何影响的,这非常适用于...原创 2018-08-04 10:14:53 · 7751 阅读 · 0 评论 -
elasticsearch 基础 —— 集群原理
空集群如果我们启动了一个单独的节点,里面不包含任何的数据和 索引,那我们的集群看起来就是一个 图 1 “包含空内容节点的集群”。图 1. 包含空内容节点的集群一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均...原创 2018-09-11 10:23:54 · 2171 阅读 · 0 评论 -
elasticsearch 基础 —— 索引、更新文档
索引文档通过使用 index API ,文档可以被 索引 —— 存储和使文档可被搜索 。 但是首先,我们要确定文档的位置。正如我们刚刚讨论的,一个文档的 _index 、 _type 和 _id 唯一标识一个文档。 我们可以提供自定义的 _id 值,或者让 index API 自动生成。创建新文档当我们索引一个文档, 怎么确认我们正在创建一个完全新的文档,而不是覆盖现有的呢?请记住...原创 2018-09-11 10:33:06 · 4396 阅读 · 0 评论 -
elasticsearch 基础 —— 处理冲突及乐观并发控制
处理冲突当我们使用 index API 更新文档 ,可以一次性读取原始文档,做我们的修改,然后重新索引 整个文档 。 最近的索引请求将获胜:无论最后哪一个文档被索引,都将被唯一存储在 Elasticsearch 中。如果其他人同时更改这个文档,他们的更改将丢失。很多时候这是没有问题的。也许我们的主数据存储是一个关系型数据库,我们只是将数据复制到 Elasticsearch 中并使其可被搜索...原创 2018-09-11 10:56:04 · 2340 阅读 · 0 评论 -
elasticsearch painless脚本评分
painless是一种新支持的脚本语言,语言格式和java十分类似。可以参考以下文档: painless语言介绍 painless api painless 实例 脚本参数 score_mode计算functions中的分数形式,加减乘除,boost_mode计算最外层的分数形式,加减乘除。所以最后总分是tf/idf分数加上脚本得分。 put http:/...原创 2018-08-30 15:34:31 · 3707 阅读 · 0 评论 -
elasticsearch relevance score相关性评分的计算
一、多shard场景下relevance score不准确问题 1、问题描述: 多个shard下,如果每个shard包含指定搜索条件的document数量不均匀的情况下,会导致在某个shard上document数量少的时候,计算该指定搜索条件的document的相关性评分要虚高。导致该document比实际真正想要返回的document的评分要高。 2、解决(1)生产环...原创 2018-08-30 14:00:21 · 6824 阅读 · 1 评论 -
elasticsearch Java Client用户指南
这里使用的Java客户端版本是5.1.2,Elasticsearch的版本号也要是5.1.2,否则一些功能可能不支持。之前介绍过Spring Data Elasticsearch,那里也是使用了本文介绍的官方客户端,只不过Spring Data Elasticsearch是一个社区项目,更新较慢,目前支持到Elasticsearch 2.4。一、客户端简介你可以使用Java clien...原创 2018-08-15 10:29:42 · 4017 阅读 · 0 评论 -
elasticsearch api约定
elasticsearch REST API 使用JSON通过HTTP协议传输。本约定贯穿整个REST API,除非有特别的说明。一、多重索引大多数APIs引用到一个index参数来在多个索引中执行操作,使用简单的test1,test2,test3标记法(或者_all表示所有索引)。它也支持通配符的方式,例如:test* 或者 *test 或者 te*t 或者 *test*,并且还有“...原创 2018-08-15 10:22:46 · 2204 阅读 · 0 评论 -
elk 解决浏览器跨域问题
1、执行命令:docker pull sebp/elk 将镜像pull到本地来;2、执行命令:切换到root用户修改配置sysctl.confvi /etc/sysctl.conf 添加下面配置:vm.max_map_count=655360并执行命令:sysctl -p 启动:docker run -p 5601:5601 -p 9200:...原创 2018-08-03 15:59:36 · 3403 阅读 · 0 评论 -
elasticsearch 深入 —— 分析器执行顺序与Mapping自定义分析器配置
默认分析器虽然我们可以在字段层级指定分析器, 但是如果该层级没有指定任何的分析器,那么我们如何能确定这个字段使用的是哪个分析器呢?分析器可以从三个层面进行定义:按字段(per-field)、按索引(per-index)或全局缺省(global default)。Elasticsearch 会按照以下顺序依次处理,直到它找到能够使用的分析器。索引时的顺序如下:字段映射里定义的 analy...原创 2018-08-03 17:29:54 · 5337 阅读 · 0 评论 -
elasticsearch 基础 —— Update By Query API
Update By Query API最简单的用法是_update_by_query在不更改源的情况下对索引中的每个文档执行更新。这对于获取新属性或其他一些在线映射更改很有用 。这是API:POST twitter/_update_by_query?conflicts=proceed这将返回如下内容:{ "took" : 147, "timed_out": false...原创 2018-09-14 15:38:11 · 24488 阅读 · 2 评论 -
elasticsearch 英文数字组合字符串模糊检索
不分词,然后用wildcard查询{ "query": { "wildcard": { "字段名": "*123*" } }}原创 2018-08-02 16:03:53 · 14962 阅读 · 10 评论 -
elasticsearch 关联单词查询以及Shingles
Shingle Token FilterA token filter of type shingle that constructs shingles (token n-grams) from a token stream. In other words, it creates combinations of tokens as a single token. For example, the...原创 2018-08-02 15:26:39 · 4838 阅读 · 0 评论 -
elasticsearch 深入 —— 分析器
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token)表示在文本字段中出现的词,由词的文本、在原始文本中的开始和结束偏移量、以及数据类型等组成。Elas...原创 2018-08-02 14:22:37 · 2973 阅读 · 0 评论 -
elasticsearch 嵌套对象使用Multi Match Query、query_string全文检索设置
参考:https://www.elastic.co/guide/en/elasticsearch/reference/1.7/mapping-nested-type.htmlhttps://stackoverflow.com/questions/31829654/elastic-search-nested-multimatch-queryhttps://www.elastic.co/g...原创 2018-08-01 15:44:15 · 6344 阅读 · 0 评论