Elasticsearch上手 - 遇到的问题

原创 2017年02月26日 11:26:37

TooManyClauses问题

问题描述

在搜索时,遇到了下面的Response:

"caused_by":{"type":"too_many_clauses","reason":"maxClauseCount is set to 1024"}}}],"caused_by":{"type":"query_shard_exception","reason":"failed to create query:

原因

查询中需要对某个字段做terms搜索,传入的候选条件过多。错误代码是:

JSONObject joQuery = query(
                    bool(
                            must(
                                    term("user", userId),
                                    terms("keys", keyList))));

解决办法

将must替换为filte即可:

JSONObject joQuery = query(
                    bool(
                            filter(
                                    term("user", userId),
                                    terms("keys", keyList))));

启动的配置问题

切换了新的服务器,在启动elasticsearch时,看到了下面的提示信息:

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这个在文档里给了很详细的说明:
https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/file-descriptors.html

搜索时超时

使用Java RestClient搜索时,出现了超时的问题:

java.io.IOException: listener timeout after waiting for [30000] ms
    at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:617) ~[rest-5.2.0.jar:5.2.0]
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:212) ~[rest-5.2.0.jar:5.2.0]
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:184) ~[rest-5.2.0.jar:5.2.0]

在创建RestClient时,设置超过时长:

private RestClient getClient(){
        return RestClient.builder(
                new HttpHost(systemConfig.elasticsearchHost, Integer.parseInt(systemConfig.elasticsearchHttpPort), "http"))
                .setMaxRetryTimeoutMillis(5 * 60 * 1000) //超时时间设为5分钟
                .build();
    }
版权声明:原创文章,欢迎转载,转载请注明出处和原文链接

org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: too_many_clauses: maxClauseCount

异常: Caused by: org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: too_many_clauses...
  • gongzi2311
  • gongzi2311
  • 2017年05月10日 20:35
  • 1783

在 Elasticsearch中设置 BooleanQuery maxClauseCount

如果bool查询的查询条件过多会导致 TooManyClauses问题: "caused_by":{"type":"too_many_clauses","reason":"maxClauseCo...
  • liyantianmin
  • liyantianmin
  • 2017年03月22日 20:02
  • 2639

使用Java Rest Client操作Elasticsearch

Elasticsearch作为一个成熟的开源框架,对主流的多种客户端语言都支持,比如Java,JavaScript ,PHP,.Net,Python,Ruby,CURL当然还有一些小众的语言,虽然es...
  • u010454030
  • u010454030
  • 2017年08月09日 19:57
  • 5191

Elasticsearch Java API深入详解

0、题记之前Elasticsearch的应用比较多,但大多集中在关系型、非关系型数据库与Elasticsearch之间的同步。以上内容完成了Elasticsearch所需要的基础数据量的供给。但想要在...
  • wojiushiwo987
  • wojiushiwo987
  • 2017年05月28日 15:14
  • 12551

Elasticsearch JAVA API和JAVA REST Clien比较

官方已经建议用REST,而 TransportClient 在7.0 开始废弃,在8.0版本移除. 详情请见:https://www.elastic.co/guide/en/elasticsearch...
  • qq_23146763
  • qq_23146763
  • 2017年04月06日 01:22
  • 3196

ElasticSearch RestHighLevelClient 教程(一)通用操作

前言 ​ 项目中使用到ElasticSearch作为搜索引擎。而ES的环境搭建自然是十分简单,且本身就适应于分布式环境,因此这块就不多赘述。而其本身特性和查询语句这篇博文不会介绍,如果有机会会深...
  • paditang
  • paditang
  • 2017年12月14日 15:03
  • 1754

Elasticsearch5.5.1 JAVA客户端RestClient示例

  • 2017年09月05日 17:09
  • 14KB
  • 下载

elasticsearch Java High Level REST Client 使用

elasticsearch Java High Level REST ClientAuthor : Janloong Do_O 官方在 6+ 版本中已经说明TransportClient 会在...
  • du807110586
  • du807110586
  • 2017年12月22日 14:36
  • 902

【异常】elasticsearch的RestClientAPI请求超时问题:java.lang.RuntimeException: error while performing request

问题描述: 在Spark中使用elasticsearch的RestClient API在读取es中数据时,出现TimeoutException,在之前的优化的中做下面的超时设置,这个只能解决requ...
  • wangweislk
  • wangweislk
  • 2017年12月19日 10:00
  • 410

elasticsearch java 基于 RestClientAPI 的增删改查

elasticsearch java 基于 RestClientAPI 的增删改查
  • chenjiale0102
  • chenjiale0102
  • 2017年12月11日 10:56
  • 269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Elasticsearch上手 - 遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)