簡體   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