2017-07-25 78 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