深入理解Elasticsearch(原书第三版)
进度
阅读完成
笔记
prefix-query不会被分析,match query会被分析
es1.0多播发现机制,2.0单播默认发现机制。zen discovery
ingest等价于java版logstash节点
shrink api 索引收缩
查询数据:查询,过滤器
normalization 归一化
BM25和TF-IDF
es当作NOSQL,无分析查询会更好。也即精确查询。
基本查询:match,multi_match,common,fuzzy_like_this,fuzzy_like_this_field,geoshape,ids,match_all,query_string,simple_query_string range,prefix,regex,span_term,term,terms,wildcard
组合查询:bool,boosting,constant_score,dis_max,filtered,function_score,has_child,has_parent,indices,nested,span_first,span_multi, span_near,span_not,span_or,span_term,top_children
无分析查询:term,terms,common,ids,prefix,span_term,wildcard
全文检索:match,multi_match,query_string,simple_query_string
模式匹配:prefix,regexp,wildcard
相似度查询: fuzzy,fuzzy_like_this,fuzzy_like_this_filed,more_like_this,more_like_this_field
支持修改分数查询:boosting,constant_score,function_score,indices
位置敏感:match_pjrase,span_first,span_multi,span_near,span_not,span_or,span_term
结构敏感:nested,has_child,has_parent,top_children
查询改写:prefix,rewrite参数
multi_match匹配类型:best_fields,most_fields,cross_fields,phrase,phrase_prefix
es使用mustache实现查询模板
es管理关系型提供了:嵌套,父子文档结构
处理人类语言。
文档通过路由知道放在哪一个分片上面了。
集群主节点任务:节点间分配分片。
分片是一个Lucence索引。
相似度模型(similarity):TF-IDF,BM25,DFR,DFI,IB,LM Dirichlet,LM JelinekMercer
store模块:lucene和io子系统的抽象:niofs,simplefs,mmapfs,fs
Searcher重新打开的过程:refresh,默认1s
flush:将事务日志同步到lucene index,同时清空事务日志。默认5s
实时读取:从事务日志中读取。
段合并耗费性能的操作。
并发合并调度器:ConcurrentMergeScheduler
NRT:近实时
发现模块:选主,发现新节点,形成和发现新节点过程叫发现。Zen发现模块单播(unicast)发现集群中其他节点。
微服务发现是发现别人,但是自己发现不了。
es恢复过程:加载通过网关模块存储的数据以使得es正常工作。每当集群整体启动时候,恢复过程就会启动,加载所有数据:元数据,映射和全部索引。 网关模块存储es正常运行的全部数据。
es可以备份到s3,hdfs,gcs,azure
ingest处理器,内置23个等。append,convert,grok,fail等等。。。grok自带了120多种grok模式。
联盟搜索:跨集群搜索,通过部落节点
部落节点从所有连接的集群中获取集群状态,合并成一个集群状态。
percolation(过滤),suggester(联想,建议器)
查询验证 validate api
查询分析器:profile api
dfs query then fetch
发现集群变慢,阻塞等情况时候,可以看到热点线程api,看哪些线程耗费cpu,io等信息 hot_threads
当数据量够大,查询够复杂时候,就会碰到内存问题,此时增加更多内存也无济于事。
增加主分片:内存溢出,分片查询时间过长,内存交换,高IO等待等问题。增加副本分片:流量过高节点无法处理的时候,增加查询能力。
集群缺少部分节点数据,比完全不响应查询要好。
防止分片和副本部署在同一个节点,此时失去了高可用能力了。使用awareness能力。
集群部署:两个聚合节点,n个数据节点,三个候选主节点,冗余3个。设置minimum_master_nodes:2,可以避免脑裂发生。
索引刷新频率:文档需要多久才能出现在搜索结果里面。默认1s,意味着每1s索引查询器重新打开一次。
查询:总应该思考最优的查询结构,过滤器使用等。
不使用路由情况下,es会查询所有分片。如果知道文档在哪一个路由里面,将会提高效率。
索引只在一个分片上面,查询性能较差,增加副本分片对性能提高无用,需要将索引分为多个分片。把数据平均负载。
聚合查询:size是最后聚合结果返回多少组数据,shard_size是每个分片返回多少组数据。 降低size和shard_size会让聚合结果不那么准确,但是网络开销小,内存使用低。
过多的副本会导致索引速度下降。
es 预写日志WAL,tranlog,get请求获取最新的数据,确保数据持久化,优化lucene index的写入。
SSD优于HDD
基于时间的索引管理:shrink和rollover。shrink api 减少主分片,生成新的索引。只有只读才能收缩。