package io.searchbox.core;
import io.searchbox.common.AbstractIntegrationTest;
import org.elasticsearch.test.ESIntegTestCase;
import org.junit.Test;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
* @author Dogukan Sonmez
*/
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE, numDataNodes = 1)
public class MultiSearchIntegrationTest extends AbstractIntegrationTest {
String query = "{ \"query\": { \"bool\": { \"should\": [ { \"query_string\": { \"query\": \"newman\" } } ], \"filter\": { \"term\": { \"user\": \"kramer\" } }, \"minimum_number_should_match\": 1 } } }";
@Test
public void multipleSearchRequests() throws IOException {
String index = "ms_test_ix";
createIndex(index);
index(index, "mytype", "1", "{\"user\":\"kramer\", \"content\":\"newman\"}");
index(index, "mytype", "2", "{\"user\":\"kramer\", \"content\":\"newman jerry\"}");
index(index, "mytype", "3", "{\"user\":\"kramer\", \"content\":\"george\"}");
refresh();
ensureSearchable(index);
Search complexSearch = new Search.Builder(query).build();
Search simpleSearch = new Search.Builder("{\"query\": {\"match_all\" : {}}}").addIndex(index).build();
MultiSearch multiSearch = new MultiSearch.Builder(Arrays.asList(complexSearch, simpleSearch)).build();
MultiSearchResult result = client.execute(multiSearch);
assertTrue(result.getErrorMessage(), result.isSucceeded());
List<MultiSearchResult.MultiSearchResponse> responses = result.getResponses();
assertEquals(2, responses.size());
MultiSearchResult.MultiSearchResponse complexSearchResponse = responses.get(0);
assertFalse(complexSearchResponse.isError);
assertNull(complexSearchResponse.errorMessage);
SearchResult complexSearchResult = complexSearchResponse.searchResult;
assertTrue(complexSearchResult.isSucceeded());
assertNull(complexSearchResult.getErrorMessage());
assertEquals(Integer.valueOf(2), complexSearchResult.getTotal());
List<SearchResult.Hit<Comment, Void>> complexSearchHits = complexSearchResult.getHits(Comment.class);
assertEquals(2, complexSearchHits.size());
MultiSearchResult.MultiSearchResponse simpleSearchResponse = responses.get(1);
assertFalse(simpleSearchResponse.isError);
assertNull(simpleSearchResponse.errorMessage);
SearchResult simpleSearchResult = simpleSearchResponse.searchResult;
assertTrue(simpleSearchResult.isSucceeded());
assertNull(simpleSearchResult.getErrorMessage());
assertEquals(Integer.valueOf(3), simpleSearchResult.getTotal());
List<SearchResult.Hit<Comment, Void>> simpleSearchHits = simpleSearchResult.getHits(Comment.class);
assertEquals(3, simpleSearchHits.size());
}
@Test
public void multipleSearchRequestsWithOneFaulty() throws IOException {
String index = "ms_test_ix";
createIndex(index);
index(index, "mytype", "1", "{\"user\":\"kramer\", \"content\":\"newman\"}");
index(index, "mytype", "2", "{\"user\":\"kramer\", \"content\":\"newman jerry\"}");
index(index, "mytype", "3", "{\"user\":\"kramer\", \"content\":\"george\"}");
refresh();
ensureSearchable(index);
Search complexSearch = new Search.Builder(query).build();
Search simpleSearch = new Search.Builder("{\"query\": {\"match_all\" : {}}}").addIndex(index).build();
Search faultySearch = new Search.Builder("{\"query\": {\"match_all\" : {}}}").addIndex("not-found").build();
MultiSearch multiSearch = new MultiSearch.Builder(Arrays.asList(complexSearch, simpleSearch, faultySearch)).build();
MultiSearchResult result = client.execute(multiSearch);
assertTrue(result.getErrorMessage(), result.isSucceeded());
List<MultiSearchResult.MultiSearchResponse> responses = result.getResponses();
assertEquals(3, responses.size());
MultiSearchResult.MultiSearchResponse complexSearchResponse = responses.get(0);
assertFalse(complexSearchResponse.isError);
assertNull(complexSearchResponse.errorMessage);
SearchResult complexSearchResult = complexSearchResponse.searchResult;
assertTrue(complexSearchResult.isSucceeded());
assertNull(complexSearchResult.getErrorMessage());
assertEquals(Integer.valueOf(2), complexSearchResult.getTotal());
List<SearchResult.Hit<Comment, Void>> complexSearchHits = complexSearchResult.getHits(Comment.class);
assertEquals(2, complexSearchHits.size());
MultiSearchResult.MultiSearchResponse simpleSearchResponse = responses.get(1);
assertFalse(simpleSearchResponse.isError);
assertNull(simpleSearchResponse.errorMessage);
SearchResult simpleSearchResult = simpleSearchResponse.searchResult;
assertTrue(simpleSearchResult.isSucceeded());
assertNull(simpleSearchResult.getErrorMessage());
assertEquals(Integer.valueOf(3), simpleSearchResult.getTotal());
List<SearchResult.Hit<Comment, Void>> simpleSearchHits = simpleSearchResult.getHits(Comment.class);
assertEquals(3, simpleSearchHits.size());
MultiSearchResult.MultiSearchResponse faultySearchResponse = responses.get(2);
assertTrue(faultySearchResponse.isError);
assertNotNull(faultySearchResponse.errorMessage);
assertNull(faultySearchResponse.searchResult);
}
public class Comment {
public String user;
public String content;
}
}