2017-07-25 148 views
0

我想問你,如果有一種方法可以過濾ElasticSearch中的SearchRequestBuilder srb。 我有一個由公司組成的索引。每家公司都有一份英文文檔,並且可能有其他語言的文檔。所以我想把所有有文件的公司從用戶語言中選出來,如果這家公司沒有這種語言的文件給我帶來英文。過濾來自ElasticSearch的響應數據

有沒有辦法做到這一點? 預先感謝您。

+0

保存在公司列表中的文件?或者他們是否通過某些ID將與公司有關的文件分開? – Joanna

回答

0

回答更新以返回所有使用滾動API的公司。

QueryBuilder qb = termQuery("Document", "English"); 

SearchResponse scrollResp = client.prepareSearch(test) 
    .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC) 
    .setScroll(new TimeValue(60000)) 
    .setQuery(qb) 
    .setSize(100).execute().actionGet(); //max of 100 hits will be returned for each scroll 
//Scroll until no hits are returned 
do { 
    for (SearchHit hit : scrollResp.getHits().getHits()) { 
    //Handle the hit... 
    } 

    scrollResp =client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new 
    TimeValue(60000)).execute().actionGet(); 
    } 
    while(scrollResp.getHits().getHits().length != 0); 
// Zero hit mark the end of the scroll and the while loop. 

如果沒有找到其他語言的文檔,您可以使用if塊來返回具有英文文檔的公司。

像這樣的事情

if(SearchResponse1 == null) //searchResponse for Non english language 
{ 
(Search for documents in English) 
} 

希望這有助於

+0

如果我設置setSize(1),我會帶1個公司,但我想帶所有公司。第二個是,我如何在一個SearchResponse中合併? –

+0

您可以使用滾動API來獲取所有公司。請參閱更新後的答案。不確定您的意思是「合併到一個SerachResponse中」 – Dungeon