繁体   English   中英

从Java中的Elasticsearch查询返回一定数量的文档

[英]Returning certain amount of documents from elasticsearch query in java

我试图限制查询返回的文档大小。我只想说10个文档,任何查询通常显示22,我将如何购买,为返回的输出设置一个限制。 我知道我可以通过创建列表并将其添加到列表中来限制列表大小,但是我想在查询级别上做到这一点。 我的查询:预先感谢:)

ueryBuilder raceGenderQuery = QueryBuilders.boolQuery()
            .must(termQuery("lep_etg_desc", "indian"))
            .must(termQuery("lep_gen_desc", "male"));

    Set<String> suburbanLocationSet = new HashSet<String>();
    suburbanLocationSet.add("queensburgh");
    suburbanLocationSet.add("umhlanga");
    suburbanLocationSet.add("tongaat");
    suburbanLocationSet.add("phoenix");
    suburbanLocationSet.add("shallcross");
    suburbanLocationSet.add("balito");

    //Build the necessary location query.
    QueryBuilder locationQuery = QueryBuilders.boolQuery().must(termsQuery("lep_suburb_home", suburbanLocationSet));

    //Combine all Queries so that its filtered to get exact results.
    FilteredQueryBuilder finalSearchQuery = QueryBuilders.filteredQuery(QueryBuilders.boolQuery().must(raceGenderQuery).must(locationQuery), FilterBuilders.boolFilter().must(FilterBuilders.rangeFilter("lep_age").gte(25).lte(45)).must(FilterBuilders.rangeFilter("lep_max_income").gte(25000).lte(45000)));

    //Run Query through elasticsearch iterating through documents in the traceps index for query matches.
    List<Leads> finalLeadsList = new ArrayList<Leads>();
    for (Leads leads : this.leadsRepository.search(finalSearchQuery)) {
        finalLeadsList.add(leads);
    }

我认为这是您想要的:

    SearchResponse response = client.prepareSearch().setSearchType(SearchType.QUERY_THEN_FETCH).setSize(10).setQuery(finalSearchQuery).execute().get

您必须使用QUERY_THEN_FETCH来返回准确的size结果,因为否则它将从每个分片获取size结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM