`

Elasticsearch查询之TermsFilterBuilder

阅读更多

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. 

 

 

分享到:
评论

相关推荐

    ES查询客户端,elasticsearch可视化工具 elasticsearch查询客户端

    Elasticsearch查询客户端是用于与ES服务器通信的软件,它们提供了多种语言的API,允许开发者以编程方式执行索引、搜索、更新和删除等操作。常见的Elasticsearch客户端包括: - **Jest**:一个轻量级的Java REST...

    JAVA使用ElasticSearch查询in和not in的实现方式

    JAVA使用ElasticSearch查询in和not in的实现方式 Elasticsearch是一个基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是用Java开发的,并作为Apache许可条款下的开放...

    ES查询客户端,elasticsearch可视化工具

    elasticsearch的客户端比较出名的就是elasticsearch head 和Kibana了, 但是elasticsearch head已经停止更新,且样式老旧,功能不全; 而Kibana虽功能全面,但是启动麻烦,大部分功能用不上,很不灵活,所以采用vite...

    对ElasticsearchPHP进行查询语句封装可实现链式调用方便es查询

    在本项目中,“对Elasticsearch-PHP进行查询语句封装 可实现链式调用 方便 es查询”,主要涉及到的知识点有: 1. **Elasticsearch查询语句**:Elasticsearch支持丰富的查询语法,如match查询、term查询、range查询...

    linux命令行elasticsearch查询工具es2unix

    "es2unix"就是这样一个工具,它将Elasticsearch的查询结果转换为Unix可读格式,使得我们可以利用Unix命令如grep、awk和sed等进行进一步的数据处理。 **es2unix工具介绍** es2unix是一个专门针对Elasticsearch的...

    Elasticsearch查询API

    【Elasticsearch查询API】是Elasticsearch中用于检索数据的核心功能,允许用户通过各种查询语句和过滤条件从索引中获取相关文档。本文将详细介绍Elasticsearch接口API的使用,特别是全文检索、查询匹配以及常用的...

    ES客户端+谷歌浏览器插件+Multi-Elasticsearch-Head

    多弹性搜索头,对著名的 Elasticsearch Head 的改进 1.保存和存储几个Elasticsearch端点 ...它通常提供了一种直观的方式来查看索引结构、执行查询语句、分析日志数据,以及执行其他与Elasticsearch管理相关的任务。

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战)

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...

    elasticsearch python 查询的两种方法

    elasticsearch python 查询的两种方法,具体内容如下所述: from elasticsearch import Elasticsearch es = Elasticsearch res1 = es.search(index=2018-07-31, body={query: {match_all: {}}}) print(es1) {'_...

    elasticsearch查询模版-模糊查询,多字段查询,相似度计算等

    Elasticsearch(简称ES)是一个基于Apache Lucene构建的开源、分布式、RESTful风格的搜索和数据分析引擎。它允许你以前所未有的速度和规模,即时地存储、搜索和分析大量数据。Elasticsearch通常用于全文搜索、结构化...

    elasticsearch 8.11.3 windows安装包

    随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长。Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分...

    elasticSearch(ES)最新版 ik分词插件7.10 elasticsearch-analysis-ik-7.10.0

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...

    elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载

    根据提供的文件信息,我们可以推断出本篇文章将围绕Elasticsearch 6.2.2版本进行详细介绍,包括其下载方式、主要功能特性以及在实际应用中的常见用途。 ### Elasticsearch简介 Elasticsearch是一款基于Lucene的...

    springboot整合elasticsearch7实现es数据同步,查询、相关度排序、高亮显示、自动补全搜索等功能。

    springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。

    ElasticSearch正向匹配、反向匹配,空间查询等示例(java代码).rar

    4.(后端技术篇java)ElasticSearch实现反向地址匹配服务(点周边查询服务) 5.(后端技术篇java)ElasticSearch实现矩形空间查询服务 6.(后端技术篇java)ElasticSearch实现圆形空间查询服务 7.(后端技术篇java)...

    Elastic Search搭建使用教程.pdf(内含ElasticSearch教程权威指南)

    Stack Overflow则利用Elasticsearch进行地理位置查询,并通过more-like-this接口查找相关的问题和答案;GitHub则使用Elasticsearch对大量的代码仓库进行搜索。这些应用案例都展示了Elasticsearch在全文搜索、结构化...

    基于.netcore搜索封装ElasticSearch.zip

    5. **高级查询**: Elasticsearch支持丰富的查询语法,如匹配查询、范围查询、布尔查询等,以及聚合功能,如术语聚合、桶聚合等,可用于复杂的数据分析和报表生成。 6. **性能优化**: 为了提升性能,可以设置映射...

    ElasticSearch客户端工具

    ElasticSearch客户端工具是用于管理和操作Elasticsearch(ES)集群的重要软件,它们提供了一种直观、高效的方式来查看和管理ES集群的状态、索引、文档以及执行查询和分析任务。这些工具极大地简化了对Elasticsearch...

    elasticsearch7.14.0.zip

    10. **数据导入与查询**:使用Elasticsearch的`_bulk` API进行批量数据导入,可以大大提高效率。查询时,利用JSON格式的请求体,可以构建复杂的查询条件和聚合分析。 以上内容涵盖了Elasticsearch 7.14.0的基本使用...

Global site tag (gtag.js) - Google Analytics