recovery & gateway
ES在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
代表ES索引的持久化存储方式,ES默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个ES集群关闭在重新启动是就会从gateway中读取索引数据。支持本地文件,分布式文件系统,Hadoop的HDFS。
搜索类型
SearchType搜索类型有4种
①query and fetch(速度最快)(返回N倍数据量)
②query then fetch(默认的搜索方式) ③DFS query and fetch
④DFS query then fetch(可以更精确控制搜索打分和排名。)
DFS解释:先把各个分片的词频率和文档频率收集一下,然后进行词搜索的时候,各分片依据全局的词频率和文档频率进行搜索和排名。
QUERY_AND_FETCH是最快的,DFS_QUERY_THEN_FETCH是最慢的。从搜索的准确度来说,DFS要比非DFS的准确度更高。
Query
1.查询所有(match_all)。
2.解析查询字符串(query_string)支持全部的Apache Lucene查询语法。
3.通配符查询(wildcardQuery)匹配多个字符,?匹配1个字符 注意:避免 开始, 会检索大量内容造成效率缓慢。
4.词条查询(termQuery)匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条。
5.字段匹配查询(matchQuery、multiMatchQuery匹配多个字段)。
6.标识符查询(idsQuery)此查询针对内部的_uid字段运行,所以它不需要启用_id字段。
7.相似度查询(fuzzy)基于编辑距离算法来匹配文档。
8.范围查询(range)字段可以是数值型,也可以是基于字符串的。
9.跨度查询(spanTermQuery)前面有多少词。
10.组合查询、复杂查询、布尔查询(boolQuery)(must、mustNot、should-and、not、or)结合其他查询使用。
11.正则表达式查询(regexpQuery)。
12.分页查询
(setFrom(0).setSize(1))。
13.排序查询(addSort)。
14.过滤filter查询
(setPostFilter(FilterBuilders.rangeFilter("age").from(1).to(19)))
15.高亮highlight。
16.聚合查询aggregations。
文档写入
a.数据写入buffer 同时写入translog
b.每隔1s,buffer中的数据被写入segment文件(先写入os cache)
c.每隔30分钟或者translog文件一定大时就flush,所有cache中的文件被fsync到磁盘。
数据写入到可以搜索默认是1s,近实时。
IK分词器
①针对于es集群中已经存在的历史索引库,不会进行重新分词,分词插件不起作用。
②新建索引库,以及索引库下的type时,要指定相应的中文分词插件,才会起作用。会根据分词插件,对新增的索引信息进行分词,存储到es集群中。
③需要将安装好的ik中文分词插件拷贝到集群中别的节点上。
④给es集群安装插件时,优先安装中文分词插件(建议排在第一位!!)。
⑤windows下的换行符是rn , Linux os下的换行符是n ;将windows下的指令拷贝到linux命令。
行下执行,往往会报错,不能正常执行,
应对方案是:a)先将内容粘贴到Linux下的临时文件中;b)然后从linux临时文件中拷贝。
优化
①log输出的水平默认为trace,查询超过500ms即为慢查询,就要打印日志,把log输出水平改为info,可以减轻服务器的压力
②批量入库大量数据的话,建议将副本数设置为0。因为es在索引数据的时候,如果有副本存在,数据也会马上同步到副本中,这样会对es增加压力。待索引完成后将副本按需要改回来。这样可以提高索引效率。
③调大系统的"最大打开文件数",建议32K甚至是64K ulimit -a (查看) ulimit -n 32000(设置)
④修改bin/elasticsearch.in.sh中
ES_MIN_MEM和ES_MAX_MEM的大小,建 议设置一样大,避免频繁的分配内存,根据服务器内存大小,一般分配60%左右(默认 256M)
⑤分片数过多会导致检索时打开比较多的文件,另外也会导致多台服务器之间通讯。而分片数过少会导至单个分片索引过大,所以检索速度慢。建议单个分片最多存储20G左右的索引数
据,所以,分片数量=数据总量/20G
⑥副本多的话,可以提升搜索的能力,但是如果设置很多副本的话也会对服务器造成额外的压力,因为需要同步数据。所以建议设置2-3个即可
⑦使用filter查询会使用query cache, 如果业务场景中的过滤查询比较多,建议将querycache设置大一些,以提高查询速度。indices.queries.cache.size:10%(默认),可设置成百分比,也可设置成具体值,如256mb。
⑧查询结果如query.setSize不能设置成 Integer.MAX_VALUE, 因为ES内部需要建立一个数据结构来放指定大小的结果集数据。
其他
1.Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
2.索引库名称必须要全部小写,不能以下划线开头,也不能包含逗号。
3.BigDesk Plugin:节点的实时状态监控,包括jvm的情况,linux的情况, elasticsearch的情况。
4.discovery.zen代表ES的自动发现节点机制,通过配置可以禁用,此时需要设置节点注解列表。
5.如果不想返回完整的JSON文档,可以使用source返回指定字段。
6.在elasticsearch中所有的搜索都会触发相关性分数计算。过滤器不计算得分,所以他们比执行查询的速度,过滤器可缓存在内存中,允许重复搜索。如果相关性不重要,那就使用filter,否则就使用query。
7.master节点不参与查询、索引操作,仅负责对于集群管理,所以在CPU、内存、磁盘配置上,都可以比数据节点低很多。
8.在Lucene中删除文档,数据不会马上在硬盘上除去,而是在lucene索引中产生一个.del的文件,而在检索过程中这部分数据也会参与检索,lucene在检索过程会判断是否删除了,如果删除了再过滤掉。
9.默认给索引设置5个分片1个副本,分片数已经创建就不可修改。
10.ES5.X之后不再支持string;5.4之前Boolean类型支持代表boolean的数字和字符串,之后只接受true、false、
"true"、"false"。
11.ES5.4之后对test类型的字段采用BM25评分模型,而不是基于tf-idf,评分模型的选择可以通过similarity指定。
12.ES是在每个分片上单独打分的,因此分片数量会影响打分结果,分词器也会影响评分,不同的分词器会使倒排索引中词项数发生改变。
13.ES默认会索引所有的字段,如果只需要存储,enable可以设置成false,这样只能从_source中获取,无法搜索到。
评论