Elasticsearch上手 - 遇到的问题

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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搜索,传入的候选条件过多。

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();
    }
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
浅谈Elasticsearch的入门与实践
本文主要围绕ES核心特性:分布式存储特性和分析检索能力,介绍了概念、原理与实践案例,希望让读者快速理解ES的核心特性与应用场景。
|
存储 JSON 定位技术
Elasticsearch入门
Elasticsearch入门
|
7月前
|
存储 关系型数据库 MySQL
ElasticSearch 入门
【2月更文挑战第7天】ElasticSearch 入门 简介 ElasticSearch 的基本概念 ElasticSearch 的查询流程 ElasticSearch 的更新流程
68 2
|
Web App开发 自然语言处理 API
5000字详说Elasticsearch入门(一)
本文主要介绍快速入门Elasticsearch,从安装、基本概念、分词器、文档基本操作这4个方面快速入门。本篇是ES入门系列的第一篇,后续还有springboot项目集成ES、ES高级查询用法、数据库同步到ES的方案等。
5000字详说Elasticsearch入门(一)
|
索引
ElasticSearch入门
ElasticSearch入门
|
自然语言处理 关系型数据库 MySQL
ElasticSearch快速入门(1)
ElasticSearch快速入门(1)
102 1
|
自然语言处理 前端开发 Java
04-ElasticSearch入门
04-ElasticSearch入门
|
存储 JSON 自然语言处理
教你快速入门ElasticSearch,超详细简单~ 1
教你快速入门ElasticSearch,超详细简单~
221 0
|
存储 JSON 自然语言处理
Elasticsearch入门,看完又要会!慎点
本文主要介绍 ElasticSearch的使用
152 0