【问题标题】:Post Filter Query in Elasticsearch 2.3.3 using Java使用 Java 在 Elasticsearch 2.3.3 中发布过滤器查询
【发布时间】:2016-06-23 18:32:13
【问题描述】:

我在 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 版本中过滤查询已被贬值。有没有其他方法可以帮助我在执行查询之前应用过滤器?我可能遗漏了一些明显的东西。非常感谢您的帮助。

【问题讨论】:

    标签: elasticsearch elasticsearch-java-api


    【解决方案1】:

    您只需将后过滤器中的过滤器带入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();
    

    【讨论】:

    • 谢谢。我会试试这个,让你知道
    • 嗨 Val,我正在尝试使用您的解决方案。对于 BoolQueryBuilder,我已经导入了“import org.elasticsearch.index.query.BoolQueryBuilder”包。对于 OueryBuilder,我已经导入了 import "org.elasticsearch.index.query.BoolQueryBuilder" 。我还尝试了其他一些进口产品。但我收到一条错误消息,提示“MultiMatchQuery.QueryBuilder 类型的方法 boolQuery() 未定义”。我还缺少其他导入吗?
    • 对不起,我打错了 QueryBuilder 应该是 QueryBuilders。我的错,我修好了
    • 谢谢。我现在正在尝试
    • 太棒了,很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多