我已经在elasticsearch(v2.3.3)之上构建了一个Web应用程序。为了过滤查询,我正在使用elasticsearch的后过滤器。但是我知道,如果我使用后置过滤器,那么由于我没有使用任何聚合或差分过滤,过滤的性能优势将丧失。 (引用: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 - 使用Java在Elasticsearch 2.3.3中发布过滤器查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37999260/

10-17 03:04