
ElasticSearch
ElasticSearch
zuodaoyong
这个作者很懒,什么都没留下…
展开
-
ElasticSearch多值字段排序和带分词的字符串排序
多值字段比如数组,假设索引test里有如下文档结构{ "dates":["2020-06-01","2020-05-02","2019-05-02"]}如果要对test里的dates排序该如何?{ “query”:{ }, "sort": { "dates": { "order": "asc", "mode": "min" } }}对于数字或日期,你可以将多值字段减为单值,这可以通过使用min、max、avg或是sum排序模式...原创 2020-06-23 19:16:06 · 2569 阅读 · 0 评论 -
elasticsearch篇之mapping
https://blog.youkuaiyun.com/sinat_35930259/article/details/80354732翻译 2020-06-11 13:52:11 · 132 阅读 · 0 评论 -
ElasticSearch并发问题
问题提出:假设es索引里存放的是商品库存。现有多个线程同时操作es,修改某一个商品的库存,此时线程修改前都查询出商品库存,比如线程A查询出库存为100,线程B查询出库存也是100。此时线程B先更新的es里商品库存将100更新成99。但线程A在做减库存时用的是100,使用了旧值。一、悲观锁悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,上锁之后就只有一个线程可以操作这条数据了,这样别人想拿这个数据就会.翻译 2020-06-10 22:57:32 · 1461 阅读 · 0 评论 -
elasticsearch索引管理详解
一、索引shard分配创建索引主shard和副本shard:PUT /test_index{ "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 }}1、index包含多个shard2、每个shard都是一个最小工作单元同时也是一个lucene实例,承载部分数据3、增减节点时,shard会自动在nodes中负载均衡4、primary shard和replica shard,...翻译 2020-06-10 21:26:04 · 400 阅读 · 0 评论 -
elasticsearch倒排索引结构
1、倒排索引的结构(1)包含这个关键词的document list(2)包含这个关键词的所有document的数量:IDF(inverse document frequency)(3)这个关键词在每个document中出现的次数:TF(term frequency)(4)这个关键词在这个document中的次序(5)每个document的长度:length norm(6)包含这个关键词的所有document的平均长度2、倒排索引不可变的好处(1)不需要锁,提升并发能力,避免锁的问题(翻译 2020-06-09 23:38:08 · 274 阅读 · 0 评论 -
match_phrase_prefix搜索推荐
match_phrase_prefix和match_phrase原理很相似,不同点是,检索的最后一个term需要扫面整个倒排索引前缀匹配。GET /forum/_search{ "query": { "match_phrase_prefix": { "content": "java is" } }}java:会使用match搜索对于的doc,is:会作为前缀,去扫描整个倒排索引,找到所有is开头的docmatch_phrase_prefix还支持...翻译 2020-06-07 19:54:26 · 1321 阅读 · 0 评论 -
前缀匹配,通配符匹配,正则匹配
1、前缀匹配根据检索关键字的前缀查询GET /forum/_search{ "query": { "prefix": { "content": { "value": "sp" } } }}prefix query不计算relevance score,前缀越短,要处理的doc越多,性能越差,尽可能用长前缀搜索2、通配符搜索GET /forum/_search{ "query": { "wildcard"...翻译 2020-06-06 16:19:49 · 6735 阅读 · 0 评论 -
match_phrase短语匹配和近似匹配
在上一篇match query讨论了全文检索比如,有如下查询{ "match": { "content": "java spark" }}match query,只能搜索到包含java和spark的document,但是不知道java和spark是不是离的很近。如果希望搜索java spark,中间不能插入任何其他的字符,那这个时候match去做全文检索是无法做到的,此时需要使用match_phrase一、match_phrase(短语匹配)GET...翻译 2020-06-06 15:34:51 · 7707 阅读 · 2 评论 -
multi_match多field检索详解
一、相关度分数计算每个document的(相关度分数)relevance score:每个query的分数,乘以matched query数量,除以总query数量比如查询语句如下{ "query": { "bool": { "should": [ { "match": { "title": "java solution" }}, { "match": { "content": "j...翻译 2020-06-06 11:44:21 · 1648 阅读 · 0 评论 -
多shard场景下相关度分数(relevance score)不准确问题详解
在es中检索某个field中是否包含关键字,会使用到TF/IDF算法来计算相关度分数计算相关度分数主要从以下三点考虑1、在一个doc中field中关键字出现的次数(越大相关度越高)2、在所有doc中field中关键字出现的次数(次数越大相关度越低)3、doc中field的长度在计算相关度分数时,第二点很关键,因为es默认在一个shard中统计的,不是索引里所有的primary shard基于此种默认情况,有可能出现在多shard下计算相关度分数不准确比如:创建一个forum索引,翻译 2020-06-06 09:17:04 · 397 阅读 · 0 评论 -
全文检索match详解
以前讨论过term query,是要完全匹配查询信息,如果要进行full text全文检索,则需要使用match query注意:如果要检索的field,是not_analyzed类型的,那么match query也相当于term query。一、全文检索的主要方式有两种1、match query2、should二、控制搜索结果精准度1、and operator2、minimum_should_match三、举例说明1、使用and关键字GET /forum/artic翻译 2020-06-04 10:31:56 · 694 阅读 · 0 评论 -
elasticsearch之filter和query检索原理详解
(1)在倒排索引中查找搜索串,获取document listdate来举例word doc1 doc2 doc32017-01-01 * *2017-02-02 * *2017-03-03 * * *filter:2017-02-02...翻译 2020-06-03 23:09:49 · 506 阅读 · 0 评论 -
term和filter检索数据
现在es 5.x版本,type=text,默认会设置两个field,(1)field本身,比如articleID,就是分词的,分词后放入倒排索引(2)就是field.keyword,articleID.keyword,默认不分词,会最多保留256个字符,直接一个字符串放入倒排索引中。term filter/query:对搜索文本不分词,直接用倒排索引中匹配,你输入的是什么,就会匹配什么。比如说,如果对搜索文本进行分词的话,“helle world” --> “hello”和“world”翻译 2020-06-03 22:44:26 · 813 阅读 · 0 评论 -
es集群数据备份到hdfs
一、es集群数据备份es的eeplica 提供了运行时的高可用的保障机制,可以容忍少数节点的故障和部分数据的丢失,但整体上不会丢失任何数据。注意:replica无法做灾难性的数据保护,比如机房停电,所有机器全部宕机二、使用snapshot备份数据snapshot会将集群中的状态和数据全部存储到一个外部文件系统中比如HDFS。snapshot首次备份是全量备份,后面是增量备份。1...翻译 2020-03-22 15:43:53 · 1687 阅读 · 0 评论 -
shard recovery和shard重分配
在集群重启的时候,有一些配置会影响shard恢复过程。如果有10个node,每个node都有一个shard,可能是primary shard或者是replica shard。当前index有5个primary shard,每个primary shard有一个replica shard。默认配置下,shard恢复过程如下当集群遇到重启情况时,节点是一个一个启动的,可能会出现5个节点先启动...翻译 2020-03-12 21:24:55 · 530 阅读 · 0 评论 -
discovery.zen.minimum_master_nodes深度解析
discovery.zen.minimum_master_nodes对集群的稳定性至关重要,防止脑裂的出现。脑裂:如果网络的故障导致一个集群被划分成两片,每片都有多个node,以及一个master。因为master是维护集群状态,以及shard的分配。如果出现了两个master,可能导致数据破损。discovery.zen.minimum_master_nodes的作用是只有足够的ma...翻译 2020-03-07 19:26:45 · 20945 阅读 · 3 评论 -
Zen discovery集群发现机制
默认情况下,es进程会绑定本地回环地址(127.0.0.1),扫描本地上的9300~9305端口,尝试和这些端口的启动的其他es进程通信,然后组成一个集群。但是对于生产环境,每台节点需要绑定在非回环地址上才可以和其他节点通信,同时使用集群发现机制来和其他节点上的es node通信。一、discovery集群发现机制1、集群中的节点相互发现组成集群2、负责es集群master的选举...翻译 2020-03-07 17:26:44 · 5381 阅读 · 1 评论 -
Elasticsearch集群之配置与建议
1、内存es使用内存主要有jvm的堆内存和机器内存,os cache,排序和聚合都会耗费很多内存。es底层时lucene,lucene的数据结构都是基于磁盘的格式,es通过os cache来进行高性能的磁盘文件读写。当数据量达到亿级别,建议集群的每台机器的内存要大于等于64G2、cpu对于es来说,cpu没有内存更重要,cpu如果是多核,可以带来更高的并发处理能力。3、磁盘es...原创 2019-12-28 20:46:37 · 340 阅读 · 0 评论 -
Elasticsearch和Kibana安装
一、es安装步骤:1、首先下载elasticsearch的安装包:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz2、es官方推荐不要在root权限下启动,我们建立一个新的用户和用户组groupadd esgroupuseradd e...原创 2019-12-28 09:45:12 · 204 阅读 · 0 评论 -
Elasticsearch搜索方式
1、query string searchGET /index/type/_search2、query DSL3、query filter4、全文检索5、phrase search(短语搜索)6、高亮检索原创 2019-12-24 23:08:47 · 113 阅读 · 0 评论 -
Elasticsearch开山篇
功能:(1)分布式的搜索引擎和数据分析引擎(2)全文检索,结构化检索,数据分析(3)海量数据近实时的处理适用场景:(1)全文检索,搜索推荐(2)日志数据分析(3)数据挖掘(4)github开源代码管理核心概念:(1)NRT:近实时,从写入es到被检索查询有1秒(2)Cluster:集群(3)Node:节点,es的节点名称默认是随机分配的,节点启动默认...原创 2019-12-24 22:36:54 · 92 阅读 · 0 评论