2016-12-01 3 views
1

次のサンプルコードと送信するクエリの数は、SearchRequestBuilderをどれだけ構築するかによって異なり、MultiSearchResponseに追加します。N個のクエリ用のMultiSearch API

public static void requestBuilder(ArrayList<String> formulae) { 

     Client client = TransportClient.builder().build() 
       .addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("localhost",9300))); 

     SearchRequestBuilder srb1 = client 
       .prepareSearch(index) 
       .setSource(formulae.get(1)); 
     SearchRequestBuilder srb2 = client 
       .prepareSearch(index) 
       .setSource(formulae.get(2)); 

     MultiSearchResponse sr = client.prepareMultiSearch() 
       .add(srb1) 
       .add(srb2) 
       .execute() 
       .actionGet(); 

     long nbHits = 0; 
     for (MultiSearchResponse.Item item : sr.getResponses()){ 
      SearchResponse response = item.getResponse(); 
      nbHits += response.getHits().getTotalHits(); 
      System.out.println(response); 
     } 
     System.out.println(nbHits); 
     System.out.println(formulae.size()); 


    client.close(); 


    } 

私は[式のサイズ]量のSearchRequestBuilderを生成できる方法はありますか?だから私は、私のArrayListの各要素を照会することができます。

答えて

1

数式を繰り返し処理し、複数の検索に1つずつ追加してから、複数の検索要求を開始することができます。

MultiSearchRequestBuilder sr = client.prepareMultiSearch(); 
for (String formula : formulae) { 
    SearchRequestBuilder srb = client 
      .prepareSearch(index) 
      .setSource(formula); 
    sr.add(srb); 
} 
MultiSearchResponse resp = sr.execute().actionGet(); 
+0

これで運がいいですか? – Val

+0

答えがありがとう、私は、1行目、すなわちエラーが発生します。タイプの不一致:MultiSearchRequestBuilderからMultiSearchResponseに変換できません – javid

+0

私の答えが更新されました – Val

関連する問題