Elasticsearch学习笔记摘抄总结

1.Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
 
2.索引库名称必须要全部小写,不能以下划线开头,也不能包含逗号。
 
3.BigDesk Plugin:节点的实时状态监控,包括jvm的情况,linux的情况, elasticsearch的情况。
 
4.recovery & gateway
ES在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
代表ES索引的持久化存储方式,ES默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个ES集群关闭在重新启动是就会从gateway中读取索引数据。支持本地文件,分布式文件系统,Hadoop的HDFS。
 
5.discovery.zen代表ES的自动发现节点机制,通过配置可以禁用,此时需要设置节点注解列表
 
6.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的准确度更高。
 
7.Query
查询所有(match_all)
解析查询字符串(query_string)支持全部的Apache Lucene查询语法
通配符查询(wildcardQuery)*匹配多个字符,?匹配1个字符    注意:避免* 开始, 会检索大量内容造成效率缓慢
词条查询(termQuery)匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条
字段匹配查询(matchQuery、multiMatchQuery匹配多个字段)
标识符查询(idsQuery)此查询针对内部的_uid字段运行,所以它不需要启用_id字段
相似度查询(fuzzy)基于编辑距离算法来匹配文档
范围查询(range)字段可以是数值型,也可以是基于字符串的
跨度查询(spanTermQuery)前面有多少词
组合查询、复杂查询、布尔查询(boolQuery)(must、mustNot、should-and、not、or)结合其他查询使用
正则表达式查询(regexpQuery)
分页查询(setFrom(0).setSize(1))
排序查询(addSort)
过滤filter查询(setPostFilter(FilterBuilders.rangeFilter("age").from(1).to(19)))
高亮highlight
聚合查询aggregations
 
8.IK分词器
①针对于es集群中已经存在的历史索引库,不会进行重新分词,分词插件不起作用。
②新建索引库,以及索引库下的type时,要指定相应的中文分词插件,才会起作用。
会根据分词插件,对新增的索引信息进行分词,存储到es集群中。
③需要将安装好的ik中文分词插件拷贝到集群中别的节点上。
④给es集群安装插件时,优先安装中文分词插件(建议排在第一位!!)。
⑤windows下的换行符是\r\n , Linux os下的换行符是\n ;将windows下的指令拷贝到linux命令
行下执行,往往会报错,不能正常执行,
应对方案是:a)先将内容粘贴到Linux下的临时文件中;b)然后从linux临时文件中拷贝
 
9.如果不想返回完整的JSON文档,可以使用source返回指定字段。
 
10.在elasticsearch中所有的搜索都会触发相关性分数计算。过滤器不计算得分,所以他们比执行查询的速度,过滤器可缓存在内存中,允许重复搜索。如果相关性不重要,那就使用filter,否则就使用query
 
11.master节点不参与查询、索引操作,仅负责对于集群管理,所以在CPU、内存、磁盘配置上,都可以比数据节点低很多。
 
12.在Lucene中删除文档,数据不会马上在硬盘上除去,而是在lucene索引中产生一个.del的文件,而在检索过程中这部分数据也会参与检索,lucene在检索过程会判断是否删除了,如果删除了再过滤掉。
 
13.优化
①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内部需要建立一个数据结构来放指定大小的结果集数据。

猜你喜欢

转载自www.cnblogs.com/grow1016/p/12975125.html