2017-07-25 6 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社を連れてくるでしょうが、私はすべての企業を連れて行きたいと思います。もう1つは、SearchResponseをどのようにマージするかです。 –

+0

スクロールAPIを使用して、すべての企業を取得することができます。更新された回答を参照してください。「SerachResponse」のいずれかをマージすることによって、 – Dungeon

関連する問題