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查询学习;ElasticSearch查询学习;ElasticSearch查询学习;ElasticSearch查询学习;ElasticSearch查询学习;ElasticSearch查询学习;
今天小编就为大家分享一篇关于JAVA使用Elasticsearch查询in和not in的实现方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
linux命令行elasticsearch查询工具es2unix
elasticsearch python 查询的两种方法,具体内容如下所述: from elasticsearch import Elasticsearch es = Elasticsearch res1 = es.search(index=2018-07-31, body={query: {match_all: {}}}) print(es1) {'_...
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。
4.(后端技术篇java)ElasticSearch实现反向地址匹配服务(点周边查询服务) 5.(后端技术篇java)ElasticSearch实现矩形空间查询服务 6.(后端技术篇java)ElasticSearch实现圆形空间查询服务 7.(后端技术篇java)...
ElasticSearch数据导出 elasticsearch单文档数据导出 支持自定义查询 导出数据Json文件
elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载
对Elasticsearch-PHP进行查询语句封装 可实现链式调用 方便 es查询
Elasticsearch 查询语句
Elasticsearch接口api使用说明,包括全文检索,查询匹配,常用的过滤器 GET /_search的各类使用方法
elasticsearch-7.17.6及对应版本IK分词 适合人群:elasticsearch初学者 Elasticsearch 是位于 Elastic Stack 核心的分布式搜索...随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长
ElasticSearch查询term,terms,match,id查询 ElasticSearch查询refix,fuzzy,wildcard,range,regexp查询 ElasticSearch查询scroll,delete-by-query,bool,boosting,filter,highlight查询 ElasticSearch查询...
一、概述 一般来说我们开发Elasticsearch会选择...2、elasticsearch-head (方便查看ES中的索引及数据) 3、Kibana(方便开发通过rest api 调试ES,有代码提示) 4、中文分词elasticsearch-analysis-ik (ik) 1、下载ela
elasticsearch-8.2.3 windows 版本。 Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的...
ElasticSearch入门文章相关代码
docker run --name elasticsearch7.16.3 -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" -v /Users/xingyue/Home/xingyue/学习/工程化/es/elasticsearch.yml:/usr/share/elastic...
赠送jar包:elasticsearch-6.8.3.jar; 赠送原API文档:elasticsearch-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-6.8.3.pom; 包含翻译后的API文档...
赠送jar包:elasticsearch-6.3.0.jar; 赠送原API文档:elasticsearch-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-6.3.0.pom; 包含翻译后的API文档...