ES问题总结(推荐)_es问题总结
ES问题总结(推荐)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“es问题总结”。
elasticSearch/elasticSearch-sql elasticSearch-sql是基于查询ES的类SQL实现。其中采用的是阿里的druid框架,其中ElasticLexer和ElasticSqlExprParser都是对druid中的MySql的进行了扩展。
1.错误信息: Exception in thread “main” NoNodeAvailableException[None of the configured nodes are available: 解决方法:增加settings设置(红色标记)。
Settings settings = Settings.settingsBuilder()
.put(“cluster.name”,“elasticSearchDemo”).build();Client client = TransportClient.builder().addPlugin(DeleteByQueryPlugin.cla).settings(settings).build().addTransportAddrees(addre1,addre2);2.问题2->Term查询不到数据:创建索引的时候没有说明不使用分词器(默认使用分词器),当用Term查询时,原来数据中的大写转换成小写,可以在测试分词器中测试一下。如果仍然用大写字母查询,导致查询不到数据。如{“term”:{“gender”:“F”}},必须写成{“term”:{“gender”:“f”}} 3问题3 注意各种默认值,比如ES-sql中默认limit为200,term中size默认为10.例子如下:
SearchResponse response = client.prepareSearch(TEST_INDEX)
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setQuery(queryBuilder).addAggregation(AggregationBuilders.terms(“ageAgg”).field(“age”).size(100)
.subAggregation(AggregationBuilders.stats(“ageStat”).field(“age”)))
.execute().actionGet();其中按照age分组统计,其中size默认为10(红色部分).不确定可以写size(0),代码自动写为maxInt。3.问题.(脑裂)今天集群中的健康值为yellow,查看日志报错为网络异常。错误的时间已经过去10个小时,现在网络也没有异常。刚开始的时候一直怀疑网络故障,问题一直找不到突破口,分别访问没有在集群的节点,也是没有问题的。网上搜索说是由于ping.timeout默认为3秒,如果超时就会出现多个集群的现象。联想到本系统中的网络异常,发现为两个集群。可查看每个节点的集群状态的primary属性。修改方式:
discovery.zen.ping.timeout: 60s discovery.zen.minimum_master_nodes: 3 4.elasticSearch-sql查询语句
4.1group by语句其中group by之后的字段顺序重要。Limit属性为默认group by之后的第一个字段,如果没有limit默认为elasticSearch-sql自定义的200。源码在AggregationQueryAction中的explain()方法(((TermsBuilder)lastAgg).size(select.getRowCount());[大概在60L,version:2.3])Group by 之后的字段默认为全部查询源码在源码在AggregationQueryAction中的explain()方法(((TermsBuilder)subAgg).size(0);[大概在94L,version:2.3])5 特殊字符like查询 过滤特殊字符
但是不能过滤(&PERCENT、&UNDERSCORE、%、_)原因是es-sql中采用的str.replace 详细代码在org.nlpcn.es4sql.query.maker.Maker 6.ES重要的配置项
cluster.name: XXXX改名字的目的很简单,就是防止某个人的笔记本加入到了集群 node.name:XXX,默认随机所有节点的名称都是不断变化的。 discovery.zen.minimum_master_nodes:XXX discovery.zen.ping.timeout:XXXX
这两个是为了防止脑裂
gateway.expected_nodes: 10, gateway.recover_after_time: 5m 这意味着Elasticsearch会采取如下操作: *至少等待8个节点上线
*等待5分钟,或者10个节点上线后,才进行数据恢复,这取决于哪个条件先达到