elasticsearch
文章平均质量分 79
迷途码界
一些原理解读,经验分享
segmentfault:迷途码界(https://segmentfault.com/u/cclovel/articles)
展开
-
Elasticsearch 性能优化常见配置
Elasticsearch 性能优化常见配置分片异步同步数据索引存储类型注:基于elasticsearch.yml或api请求的方式进行配置。分片异步同步数据不同分片之间的数据同步是一个很大的花费,默认是1s同步,如果我们不要求实时性,我们可以执行如下:$ curl -XPUT http://localhost:9200/my_index -d '{ "settings" : { "index" : { "refresh_interval":"60s"原创 2020-09-17 14:43:03 · 205 阅读 · 0 评论 -
ElasticSearch 基于配置文件、settings设置、mapping设置的性能优化
ElasticSearch 性能优化配置文件优化设置elasticsearch.ymlthread_pool: --bulk使用的线程池方式为fix bulk: size: 5 --bulk并发线程总数(与CPU核数相关,最大为CPU核数+1) queue_size: 1000 --线程池队列总数(...原创 2020-02-07 17:53:30 · 970 阅读 · 0 评论 -
Elasticsearch 文档的核心元数据和文档修改、删除原理解析
文档核心元数据_index:说明了一个文档存储在哪个索引中,同一个索引下存放的是相似的文档(文档的field多数是相同的,可以由不同的field,但不建议使用),索引名必须是小写的,不能以下划线开头,不能包含括号。_type:表示文档属于索引中的哪个类型,一个索引下只能有一个type(6.0版本之前可以有多个type),类型名可以是大写也可以是小写的,不能以下划线开头,不能包含括号。_i...原创 2018-08-23 17:11:57 · 1244 阅读 · 0 评论 -
Elasticsearch 结构化搜索_filter执行原理深度剖析(bitset机制与caching机制)与过滤查询
Filter查询filter是不计算相关性的,同时可以cache。因此,filter速度要比query快。//创建索引并写入数据POST /lib4/items/_bluk{"index": {"_id": 1}}{"pric原创 2018-08-21 11:47:46 · 653 阅读 · 0 评论 -
Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询
集合查询sum聚合sum是一个求累加值的聚合,其作用与关系型数据库中相同。GET /lib4/items/_search{ "size": 0, //表示查询多少条文档,聚合只需就和结果,输出文档可以设置为0条 "aggs": { "price_of_sum": { //自行取名作为结果集原创 2018-08-21 14:24:51 · 13709 阅读 · 2 评论 -
Elasticsearch 对文档操作时的分片交互过程分析
路由文档到分片当我们要在ES中存储数据的时候,数据应该存储在主分片和复制分片中的哪一个中去;当我们在ES中检索数据的时候,又是怎么判断要查询的数据是属于哪一个分片。进程不能是随机的,因为我们将来要检索文档。事实上,它根据一个简单的算法决定:shard = hash(routing) % number_of_primary_shardsRouting值是一个任意字符串,它默认是 _i...原创 2018-08-24 14:16:39 · 1067 阅读 · 0 评论 -
Elasticsearch query_string查询及copy_to解析
Elastic search的常规查询如下所示GET /lib3/user/_search?q=interests:changgeGET /lib3/user/_search?q=+interest:changgeGET /lib3/user/_search?q=-interests:changge//查询含有changge或则含有hejiu的文档,但是没有指定具体的字段//此时...原创 2018-09-04 21:11:27 · 2299 阅读 · 0 评论 -
Elasticsearch 字符串排序问题
对一个字符串类型的字段进行排序通常不准确,因为已经被分词成多个词条了 解决方式:对字段索引两次,一次索引分词(用于搜索),一次索引不分词(用于排序)//不同查询GET /lib3/_search//默认的text是进行了分词,进行排序将报错GET /lib3/user/_search{ "query": { "match_all": {} },...原创 2018-09-04 21:41:13 · 6325 阅读 · 1 评论 -
Elasticsearch 如何计算相关度分数
相关度分数的计算使用的是TF/IDF算法(Term Frequency&Inverse Document Frequency)。Term Frequency:我们查询的文本中的词条在document中出现了多少次,出现次数越多,相关度越高。搜索内容:hello world Hello, I love china. Hello world,how are you!Inve...原创 2018-09-04 22:11:27 · 2684 阅读 · 0 评论 -
Elasticsearch Doc_Values解析
DocValue其实是Lucene在构建倒排索引时,会额外建立一个有序的正排索引(基于document => field value的映射列表)。{“birthday”:“1985-11-11”,age:23}{“birthday”:“1989-11-11”,age:29}document age birthdaydoc1 23 1985-11-11doc1 29 198...原创 2018-09-04 22:29:56 · 8647 阅读 · 0 评论 -
Elasticsearch 使用scroll滚动技术实现大数据量搜索、深度分页问题 和 search_after 实现深度分页
如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scroll滚动查询,一批一批的查,直到所有数据都查询完为止。scroll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的采用基于_doc(不使用_score)进行排序的方式,性能较高每次发送scroll请求,我们还需要指定一个scroll...原创 2018-09-05 16:38:35 · 6909 阅读 · 1 评论 -
Elasticsearch dynamic mapping(动态映射) 策略
当 Elasticsearch 遇到文档中以前 未遇到的字段,它用 dynamic mapping(动态映射) 来确定字段的数据类型并自动把新的字段添加到类型映射。有时这是想要的行为有时又不希望这样。通常没有人知道以后会有什么新字段加到文档,但是又希望这些字段被自动的索引。也许你只想忽略它们。如果Elasticsearch是作为重要的数据存储,可能就会期望遇到新字段就会抛出异常,这样能及时发现...原创 2018-09-05 17:40:27 · 5822 阅读 · 2 评论 -
Elasticsearch 基于不可修改field的重建索引
重建索引一个 field 的设置是不能修改的,如果要修改一个 field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用 bulk api 写入到新的index中。批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scroll就查询指定日期扽一段数据,交给一个线程即可。//创建一个索引并写入一条数据,...原创 2018-09-05 21:52:05 · 1044 阅读 · 0 评论 -
Elasticsearch 分页查询中的deep paging问题
分页查询的deep paging问题首先回顾下分页查询GET /lib3/user/_search{ "from": 0, "size": 2, "query": { "terms": { "interests": ["hejiu", "changge"] }原创 2018-09-03 21:23:24 · 1143 阅读 · 2 评论 -
Elasticsearch 水平扩容过程与容错机制
水平扩容过程扩容后 primary shard 和 replica shard 会自动的负载均衡。扩容后每一个节点上的 shard 会减少,那么分配给每个 shard 的CPU、内存、IO资源会更多,性能将会提高。 扩容的极限,如果有6个 shard,扩容的极限就是6个节点,每个节点上一个 shard,如果想超出扩容的极限,比如说扩容到9个节点,那么可以增加 replica shard...原创 2018-08-23 14:54:13 · 5341 阅读 · 7 评论 -
Elasticsearch 分片和副本机制与单点、多点环境创建index解析
分片和副本机制index 包含多个 shard,创建 index 时可以在settings中设置分片数,不设置时默认是5个。每个 shard 都是一个最小工作单元,承载部分数据;每个 shard 都是一个 lucene 实例,并且具有完整的建立索引和处理能力。增减节点时,shard 会自动在 nodes 中负载均衡。primary shard(主分片) 和 replica shard(...原创 2018-08-23 10:37:46 · 4892 阅读 · 0 评论 -
Elasticsearch 分布式架构解析
Elasticseasrch的架构遵循其基本概念:一个采用Restful API标准的 高扩展性 和 高可用性 的 实时数据分析 的全文搜索工具。高扩展性:体现在Elasticsearch添加节点非常简单,新节点无需做复杂的配置,只要配置好集群信息将会被集群自动发现。高可用性:因为Elasticsearch是分布式的,每个节点都会有备份,所以down一两个节点也不会出现问题,集群会通过备份...原创 2018-08-22 23:17:07 · 2736 阅读 · 5 评论 -
Elasticsearch建立多机集群
Elasticsearch建立多机集群通过discovery.zen.ping.unicast.hosts: [“host1”, “host2:port”, “host3[portX-portY]”] 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。1、选取10.122.4.79这台机器做为client node,elasticsearch.yml中的配置如下:原创 2017-09-04 16:02:09 · 3338 阅读 · 6 评论 -
Elasticsearch负载均衡节点
Elasticsearch负载均衡节点elasticSearch的配置文件中有2个参数:node.master和node.data。这两个参 数搭配使用时,能够帮助提供服务器性能。组合一:该node服务器只作为一个数据节点,只用于存储索引数据。使该node服务器功能 单一,只用于数据存储和数据查询,降低其资源消耗率。node.master: false node.data: true组合二:该no原创 2017-09-04 16:06:20 · 10807 阅读 · 0 评论 -
基于 Elasticsearch5.0 部署问题解决集锦
Elasticsearch5.0 安装问题集锦elasticsearch 5.0 安装过程中遇到了一些问题,通过查找资料几乎都解决掉了,这里简单记录一下 ,供以后查阅参考,也希望可以帮助遇到同样问题的你。问题一:安装完elasticsearch后,运行报错root@localhost work]# Exception in thread "main" Java.lang.UnsupportedCla原创 2017-09-04 16:12:48 · 540 阅读 · 0 评论 -
Elasticsearch的sql化使用
Elasticsearch-sql的安装、使用本文以Elasticsearch-5.1.2为例 elasticsearch-sql下载地址:https://github.com/NLPchina/elasticsearch-sql安装:方法1:进入elasticsearch目录下执行下面命令:./bin/elasticsearch-plugin install h...原创 2018-03-28 14:30:06 · 2337 阅读 · 2 评论 -
Elasticsearch分词器介绍、内置分词器及配置中文分词器
1、分词器、分词器是从一串文本中切分一个个的词条,并对每个词条进行标准化,包含三个部分:character filter:分词之前的预处理,过滤掉HTML标签、特殊符号转换(例如,将&符号转换成and、将|符号转换成or)等。tokenizer:分词token filter:标准化2、内置分词器standard分词器:(默认的)它将词汇单元转换成小写形式,并去...原创 2018-08-09 09:38:28 · 3073 阅读 · 0 评论 -
Elasticsearch API实现CRUD(增删改查)
1、Kibana的安装、配置及使用本文将基于Kibana来讲解,再次之前需要安装Kibana工具。进入Elasticsearch官网下载Kibana:https://www.elastic.co/downloads/kibana,需要注意的是Kibana的版本跟随着Elasticsearch的版本,所以需要下载跟你的Elasticsearch一致的版本。解压kibana的压缩包,进入c...原创 2018-08-09 16:22:57 · 1420 阅读 · 0 评论 -
Elasticsearch使用MultiGet批量获取文档与使用Bulk批量操作
Multi Get 批量获取Multi Get API可以通过索引名、类型名、文档id一次得到一个文档集合,文档可以来自同一个索引库,也可以来自不同的索引库。GET /_mget{ "docs":[ { "_index": "lib",原创 2018-08-09 17:23:38 · 3256 阅读 · 0 评论 -
Elasticsearch Mapping的解析、数据类型、Mapping 支持属性、Mapping 字段设置流程
什么是Mapping(映射)映射(Mapping)相当于数据表的表结构。ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。映射可以分为动态映射和静态映射。 动态映射 (dynamic mapping):在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据。而Elast...原创 2018-08-14 15:23:42 · 16818 阅读 · 0 评论 -
Elasticsearch 版本控制保证数据一致性
版本控制Elasticsearch采用了乐观锁来保证数据的一致性,即当用户对document(文档,即关系数据库中表里的一条数据)进行操作时,并不需要对该document做加锁、解锁的操作,只需要指定要操作的版本即可。当版本号一致时,Elasticsearch会允许该操作顺利进行,而当版本号存在冲突时,Elasticsearch会提示冲突并抛出异常(VersionConflictEngineE...原创 2018-08-11 17:26:41 · 1415 阅读 · 0 评论 -
Elasticsearch 与传统关系型数据库的对比、倒排索引原理解析
Elasticsearch使用一种称为倒排索引的结构,她适用于快速的全文搜索。 一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。示例:1、假设文档集合包含五个文档,每个文档内容表所示,表的最左端一栏是每个文档对应的文档编号,我们的任务就是对这个文档集合建立倒排索引。 文档编号 文档内容 1 谷歌地图之父跳槽Faceboo...原创 2018-08-08 23:01:19 · 5280 阅读 · 0 评论 -
Elasticsearch 基本查询(Query查询)
基本查询(Query查询)数据准备及简单查询//首先做一个数据准备,创建一个索引PUT /lib3{ "settings": { "number_of_shards": 3, "number_of_replicas": 0 }, "mappings": {原创 2018-08-18 18:23:35 · 13051 阅读 · 1 评论