Post 使用 Java 在 Elasticsearch 2.3.3 中过滤查询
Post Filter Query in Elasticsearch 2.3.3 using Java
我已经在 elasticsearch (v2.3.3) 之上构建了一个网络应用程序。为了过滤查询,我使用了 elasticsearch 的 post 过滤器。但我开始知道,如果我使用 post 过滤器,那么过滤的性能优势将会丢失,因为我没有使用任何聚合或差异过滤。 (参考:https://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html)
这是我的 elasticsearch 客户端的样子:
Client client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),
9300));
SearchResponse response = client.prepareSearch("index_name")
.setTypes("index_type")
.setQuery(QueryBuilders.simpleQueryStringQuery(query)
.field("newContent").field("T"))
.setPostFilter(QueryBuilders.termQuery(Collection, true))
.setFetchSource(new String[] { "U", "UE", "UD", "T" }, null)
.setVersion(true).addHighlightedField("newContent").setFrom(0)
.setSize(10).execute().actionGet();
我还了解到,过滤查询在 elasticsearch 2.x 版本中已贬值。有没有其他方法可以帮助我在执行查询之前应用过滤器?我可能遗漏了一些明显的东西。非常感谢您的帮助。
您只需将 post 过滤器中的过滤器放入 bool/filter
查询中。尝试改为点击:
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.simpleQueryStringQuery(query)
.field("newContent").field("T"))
.filter(QueryBuilders.termQuery(Collection, true));
SearchResponse response = client.prepareSearch("index_name")
.setTypes("index_type")
.setQuery(boolQuery)
.setFetchSource(new String[] { "U", "UE", "UD", "T" }, null)
.setVersion(true).addHighlightedField("newContent").setFrom(0)
.setSize(10).execute().actionGet();
我已经在 elasticsearch (v2.3.3) 之上构建了一个网络应用程序。为了过滤查询,我使用了 elasticsearch 的 post 过滤器。但我开始知道,如果我使用 post 过滤器,那么过滤的性能优势将会丢失,因为我没有使用任何聚合或差异过滤。 (参考:https://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html)
这是我的 elasticsearch 客户端的样子:
Client client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),
9300));
SearchResponse response = client.prepareSearch("index_name")
.setTypes("index_type")
.setQuery(QueryBuilders.simpleQueryStringQuery(query)
.field("newContent").field("T"))
.setPostFilter(QueryBuilders.termQuery(Collection, true))
.setFetchSource(new String[] { "U", "UE", "UD", "T" }, null)
.setVersion(true).addHighlightedField("newContent").setFrom(0)
.setSize(10).execute().actionGet();
我还了解到,过滤查询在 elasticsearch 2.x 版本中已贬值。有没有其他方法可以帮助我在执行查询之前应用过滤器?我可能遗漏了一些明显的东西。非常感谢您的帮助。
您只需将 post 过滤器中的过滤器放入 bool/filter
查询中。尝试改为点击:
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.simpleQueryStringQuery(query)
.field("newContent").field("T"))
.filter(QueryBuilders.termQuery(Collection, true));
SearchResponse response = client.prepareSearch("index_name")
.setTypes("index_type")
.setQuery(boolQuery)
.setFetchSource(new String[] { "U", "UE", "UD", "T" }, null)
.setVersion(true).addHighlightedField("newContent").setFrom(0)
.setSize(10).execute().actionGet();