当前位置:   article > 正文

Elasticsearch查询之TermsFilterBuilder

scala如何写termsquerybuilder

Lucene在做大量term值查询时, 如果这值过多, 超1024个term的话, 会出现

TooManyClauses[maxClauseCount is set to 1024] 的异常,因此建议在term过多的情况下采用filter, 而不是query。

以下是该情形在ES中的测试。

 

 

  1. Settings defaultSettings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).build();
  2. Settings finalSettings = ImmutableSettings.settingsBuilder().put(defaultSettings)
  3. .put("name", NetworkUtils.getLocalAddress().getHostName()).build();
  4. TransportClient tmp = new TransportClient(finalSettings);
  5. Client client = tmp.addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300));
  6. //demo 100万数据
  7. for (int i = 0; i < 1000000; i++)
  8. {
  9. client.prepareIndex("test2", "book",String.valueOf(i)).setSource("bookid", String.valueOf(i), "booktype", String.valueOf(i%10000)).execute()
  10. .actionGet();
  11. }
  12. //demo 近1万个term
  13. String[] values = new String[10000];
  14. for (int i = 1; i < 10000; i++)
  15. {
  16. values[i] = String.valueOf(i);
  17. }
  18. //terms query
  19. //TermsQueryBuilder termQueryBuilder = new TermsQueryBuilder("booktype", values);
  20. TermsFilterBuilder termsFilterBuilder = new TermsFilterBuilder("booktype", values);
  21. // SearchResponse searchResponse = client.prepareSearch().setIndices("test2").setQuery(termQueryBuilder)
  22. // .setFrom(0).setSize(100).execute().actionGet();
  23. //terms filter
  24. SearchResponse searchResponse = client.prepareSearch().setIndices("test2").setQuery(QueryBuilders.matchAllQuery()).setFilter(termsFilterBuilder)
  25. .setFrom(0).setSize(100).execute().actionGet();
  26. SearchHits hits = searchResponse.getHits();
  27. System.out.println(hits.totalHits());
  28. for (SearchHit searchHit : hits)
  29. {
  30. System.out.println(searchHit.getId() + ":" + searchHit.getSource().get("booktype"));
  31. }

 上述结果会发现, 用TermsQueryBuilder查询的话, 会出现TooManyClauses的异常, 因为设置了9999个term值。因此,当term过多时,建议采用filter, 而不是query. 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/807241?site
推荐阅读
相关标签
  

闽ICP备14008679号