Lucene在做大量term值查询时, 如果这值过多, 超1024个term的话, 会出现
TooManyClauses[maxClauseCount is set to 1024] 的异常,因此建议在term过多的情况下采用filter, 而不是query。
以下是该情形在ES中的测试。
Settings defaultSettings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).build(); Settings finalSettings = ImmutableSettings.settingsBuilder().put(defaultSettings) .put("name", NetworkUtils.getLocalAddress().getHostName()).build(); TransportClient tmp = new TransportClient(finalSettings); Client client = tmp.addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300)); //demo 100万数据 for (int i = 0; i < 1000000; i++) { client.prepareIndex("test2", "book",String.valueOf(i)).setSource("bookid", String.valueOf(i), "booktype", String.valueOf(i%10000)).execute() .actionGet(); } //demo 近1万个term String[] values = new String[10000]; for (int i = 1; i < 10000; i++) { values[i] = String.valueOf(i); } //terms query //TermsQueryBuilder termQueryBuilder = new TermsQueryBuilder("booktype", values); TermsFilterBuilder termsFilterBuilder = new TermsFilterBuilder("booktype", values); // SearchResponse searchResponse = client.prepareSearch().setIndices("test2").setQuery(termQueryBuilder) // .setFrom(0).setSize(100).execute().actionGet(); //terms filter SearchResponse searchResponse = client.prepareSearch().setIndices("test2").setQuery(QueryBuilders.matchAllQuery()).setFilter(termsFilterBuilder) .setFrom(0).setSize(100).execute().actionGet(); SearchHits hits = searchResponse.getHits(); System.out.println(hits.totalHits()); for (SearchHit searchHit : hits) { System.out.println(searchHit.getId() + ":" + searchHit.getSource().get("booktype")); }
上述结果会发现, 用TermsQueryBuilder查询的话, 会出现TooManyClauses的异常, 因为设置了9999个term值。因此,当term过多时,建议采用filter, 而不是query.
相关推荐
Elasticsearch查询客户端是用于与ES服务器通信的软件,它们提供了多种语言的API,允许开发者以编程方式执行索引、搜索、更新和删除等操作。常见的Elasticsearch客户端包括: - **Jest**:一个轻量级的Java REST...
JAVA使用ElasticSearch查询in和not in的实现方式 Elasticsearch是一个基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是用Java开发的,并作为Apache许可条款下的开放...
elasticsearch的客户端比较出名的就是elasticsearch head 和Kibana了, 但是elasticsearch head已经停止更新,且样式老旧,功能不全; 而Kibana虽功能全面,但是启动麻烦,大部分功能用不上,很不灵活,所以采用vite...
在本项目中,“对Elasticsearch-PHP进行查询语句封装 可实现链式调用 方便 es查询”,主要涉及到的知识点有: 1. **Elasticsearch查询语句**:Elasticsearch支持丰富的查询语法,如match查询、term查询、range查询...
"es2unix"就是这样一个工具,它将Elasticsearch的查询结果转换为Unix可读格式,使得我们可以利用Unix命令如grep、awk和sed等进行进一步的数据处理。 **es2unix工具介绍** es2unix是一个专门针对Elasticsearch的...
【Elasticsearch查询API】是Elasticsearch中用于检索数据的核心功能,允许用户通过各种查询语句和过滤条件从索引中获取相关文档。本文将详细介绍Elasticsearch接口API的使用,特别是全文检索、查询匹配以及常用的...
多弹性搜索头,对著名的 Elasticsearch Head 的改进 1.保存和存储几个Elasticsearch端点 ...它通常提供了一种直观的方式来查看索引结构、执行查询语句、分析日志数据,以及执行其他与Elasticsearch管理相关的任务。
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
elasticsearch python 查询的两种方法,具体内容如下所述: from elasticsearch import Elasticsearch es = Elasticsearch res1 = es.search(index=2018-07-31, body={query: {match_all: {}}}) print(es1) {'_...
Elasticsearch(简称ES)是一个基于Apache Lucene构建的开源、分布式、RESTful风格的搜索和数据分析引擎。它允许你以前所未有的速度和规模,即时地存储、搜索和分析大量数据。Elasticsearch通常用于全文搜索、结构化...
随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长。Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分...
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...
根据提供的文件信息,我们可以推断出本篇文章将围绕Elasticsearch 6.2.2版本进行详细介绍,包括其下载方式、主要功能特性以及在实际应用中的常见用途。 ### Elasticsearch简介 Elasticsearch是一款基于Lucene的...
springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。
4.(后端技术篇java)ElasticSearch实现反向地址匹配服务(点周边查询服务) 5.(后端技术篇java)ElasticSearch实现矩形空间查询服务 6.(后端技术篇java)ElasticSearch实现圆形空间查询服务 7.(后端技术篇java)...
Stack Overflow则利用Elasticsearch进行地理位置查询,并通过more-like-this接口查找相关的问题和答案;GitHub则使用Elasticsearch对大量的代码仓库进行搜索。这些应用案例都展示了Elasticsearch在全文搜索、结构化...
5. **高级查询**: Elasticsearch支持丰富的查询语法,如匹配查询、范围查询、布尔查询等,以及聚合功能,如术语聚合、桶聚合等,可用于复杂的数据分析和报表生成。 6. **性能优化**: 为了提升性能,可以设置映射...
ElasticSearch客户端工具是用于管理和操作Elasticsearch(ES)集群的重要软件,它们提供了一种直观、高效的方式来查看和管理ES集群的状态、索引、文档以及执行查询和分析任务。这些工具极大地简化了对Elasticsearch...
10. **数据导入与查询**:使用Elasticsearch的`_bulk` API进行批量数据导入,可以大大提高效率。查询时,利用JSON格式的请求体,可以构建复杂的查询条件和聚合分析。 以上内容涵盖了Elasticsearch 7.14.0的基本使用...