From cc39eb76d014dcea45baac4af23fd47945133d27 Mon Sep 17 00:00:00 2001 From: kimchy Date: Wed, 15 Jun 2011 14:11:15 +0300 Subject: [PATCH] add a narrowing search scan test --- .../action/search/SearchRequestBuilder.java | 2 +- .../search/scan/SearchScanScrollingTests.java | 225 ++++++++++++++++++ .../search/scan/SearchScanTests.java | 150 ++---------- 3 files changed, 244 insertions(+), 133 deletions(-) create mode 100644 modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/scan/SearchScanScrollingTests.java diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/client/action/search/SearchRequestBuilder.java b/modules/elasticsearch/src/main/java/org/elasticsearch/client/action/search/SearchRequestBuilder.java index d6de8a8fb23..e186ab3732b 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/client/action/search/SearchRequestBuilder.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/client/action/search/SearchRequestBuilder.java @@ -479,7 +479,7 @@ public class SearchRequestBuilder extends BaseRequestBuilder ids = Sets.newHashSet(); + Set expectedIds = Sets.newHashSet(); + for (int i = 0; i < numberOfDocs; i++) { + String id = Integer.toString(i); + expectedIds.add(id); + String routing = null; + if (unbalanced) { + if (i < (numberOfDocs * 0.6)) { + routing = "0"; + } else if (i < (numberOfDocs * 0.9)) { + routing = "1"; + } else { + routing = "2"; + } + } + client.prepareIndex("test", "type1", id).setRouting(routing).setSource("field", i).execute().actionGet(); + } + + client.admin().indices().prepareRefresh().execute().actionGet(); + + SearchResponse searchResponse = client.prepareSearch() + .setSearchType(SearchType.SCAN) + .setQuery(matchAllQuery()) + .setSize(size) + .setScroll(TimeValue.timeValueMinutes(2)) + .execute().actionGet(); + + assertThat(searchResponse.hits().totalHits(), equalTo(numberOfDocs)); + + // start scrolling, until we get not results + while (true) { + searchResponse = client.prepareSearchScroll(searchResponse.scrollId()).setScroll(TimeValue.timeValueMinutes(2)).execute().actionGet(); + assertThat(searchResponse.hits().totalHits(), equalTo(numberOfDocs)); + assertThat(searchResponse.failedShards(), equalTo(0)); + for (SearchHit hit : searchResponse.hits()) { + assertThat(hit.id() + "should not exists in the result set", ids.contains(hit.id()), equalTo(false)); + ids.add(hit.id()); + } + if (searchResponse.hits().hits().length == 0) { + break; + } + } + + assertThat(expectedIds, equalTo(ids)); + } +} \ No newline at end of file diff --git a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/scan/SearchScanTests.java b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/scan/SearchScanTests.java index caedd3db411..38af66b3547 100644 --- a/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/scan/SearchScanTests.java +++ b/modules/test/integration/src/test/java/org/elasticsearch/test/integration/search/scan/SearchScanTests.java @@ -33,6 +33,7 @@ import org.testng.annotations.Test; import java.util.Set; +import static org.elasticsearch.common.xcontent.XContentFactory.*; import static org.elasticsearch.index.query.QueryBuilders.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; @@ -56,160 +57,45 @@ public class SearchScanTests extends AbstractNodesTests { return client("node1"); } - @Test public void shard1docs100size3() throws Exception { - testScroll(1, 100, 3); - } - - @Test public void shard1docs100size7() throws Exception { - testScroll(1, 100, 7); - } - - @Test public void shard1docs100size13() throws Exception { - testScroll(1, 100, 13); - } - - @Test public void shard1docs100size24() throws Exception { - testScroll(1, 100, 24); - } - - @Test public void shard1docs100size45() throws Exception { - testScroll(1, 100, 45); - } - - @Test public void shard1docs100size63() throws Exception { - testScroll(1, 100, 63); - } - - @Test public void shard1docs100size89() throws Exception { - testScroll(1, 100, 89); - } - - @Test public void shard1docs100size99() throws Exception { - testScroll(1, 100, 99); - } - - @Test public void shard1docs100size100() throws Exception { - testScroll(1, 100, 100); - } - - @Test public void shard1docs100size101() throws Exception { - testScroll(1, 100, 101); - } - - @Test public void shard1docs100size120() throws Exception { - testScroll(1, 100, 120); - } - - @Test public void shard3docs100size3() throws Exception { - testScroll(3, 100, 3); - } - - @Test public void shard3docs100size7() throws Exception { - testScroll(3, 100, 7); - } - - @Test public void shard3docs100size13() throws Exception { - testScroll(3, 100, 13); - } - - @Test public void shard3docs100size24() throws Exception { - testScroll(3, 100, 24); - } - - @Test public void shard3docs100size45() throws Exception { - testScroll(3, 100, 45); - } - - @Test public void shard3docs100size63() throws Exception { - testScroll(3, 100, 63); - } - - @Test public void shard3docs100size89() throws Exception { - testScroll(3, 100, 89); - } - - @Test public void shard3docs100size120() throws Exception { - testScroll(3, 100, 120); - } - - @Test public void shard3docs100size3Unbalanced() throws Exception { - testScroll(3, 100, 3, true); - } - - @Test public void shard3docs100size7Unbalanced() throws Exception { - testScroll(3, 100, 7, true); - } - - @Test public void shard3docs100size13Unbalanced() throws Exception { - testScroll(3, 100, 13, true); - } - - @Test public void shard3docs100size24Unbalanced() throws Exception { - testScroll(3, 100, 24, true); - } - - @Test public void shard3docs100size45Unbalanced() throws Exception { - testScroll(3, 100, 45, true); - } - - @Test public void shard3docs100size63Unbalanced() throws Exception { - testScroll(3, 100, 63, true); - } - - @Test public void shard3docs100size89Unbalanced() throws Exception { - testScroll(3, 100, 89, true); - } - - @Test public void shard3docs100size120Unbalanced() throws Exception { - testScroll(3, 100, 120); - } - - private void testScroll(int numberOfShards, long numberOfDocs, int size) throws Exception { - testScroll(numberOfShards, numberOfDocs, size, false); - } - - private void testScroll(int numberOfShards, long numberOfDocs, int size, boolean unbalanced) throws Exception { + @Test public void testNarrowingQuery() throws Exception { try { client.admin().indices().prepareDelete("test").execute().actionGet(); } catch (Exception e) { // ignore } - client.admin().indices().prepareCreate("test").setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", numberOfShards)).execute().actionGet(); + client.admin().indices().prepareCreate("test").setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 5)).execute().actionGet(); client.admin().cluster().prepareHealth().setWaitForGreenStatus().execute().actionGet(); + Set ids = Sets.newHashSet(); Set expectedIds = Sets.newHashSet(); - for (int i = 0; i < numberOfDocs; i++) { - String id = Integer.toString(i); - expectedIds.add(id); - String routing = null; - if (unbalanced) { - if (i < (numberOfDocs * 0.6)) { - routing = "0"; - } else if (i < (numberOfDocs * 0.9)) { - routing = "1"; - } else { - routing = "2"; - } - } - client.prepareIndex("test", "type1", id).setRouting(routing).setSource("field", i).execute().actionGet(); + + for (int i = 0; i < 100; i++) { + expectedIds.add(Integer.toString(i)); + client.prepareIndex("test", "tweet", Integer.toString(i)).setSource( + jsonBuilder().startObject().field("user", "kimchy1").field("postDate", System.currentTimeMillis()).field("message", "test").endObject()).execute().actionGet(); + } + + for (int i = 100; i < 200; i++) { + client.prepareIndex("test", "tweet", Integer.toString(i)).setSource( + jsonBuilder().startObject().field("user", "kimchy2").field("postDate", System.currentTimeMillis()).field("message", "test").endObject()).execute().actionGet(); } client.admin().indices().prepareRefresh().execute().actionGet(); SearchResponse searchResponse = client.prepareSearch() .setSearchType(SearchType.SCAN) - .setQuery(matchAllQuery()) - .setSize(size) + .setQuery(termQuery("user", "kimchy1")) + .setSize(35) .setScroll(TimeValue.timeValueMinutes(2)) .execute().actionGet(); - assertThat(searchResponse.hits().totalHits(), equalTo(numberOfDocs)); + assertThat(searchResponse.hits().totalHits(), equalTo(100l)); // start scrolling, until we get not results while (true) { searchResponse = client.prepareSearchScroll(searchResponse.scrollId()).setScroll(TimeValue.timeValueMinutes(2)).execute().actionGet(); - assertThat(searchResponse.hits().totalHits(), equalTo(numberOfDocs)); + assertThat(searchResponse.hits().totalHits(), equalTo(100l)); assertThat(searchResponse.failedShards(), equalTo(0)); for (SearchHit hit : searchResponse.hits()) { assertThat(hit.id() + "should not exists in the result set", ids.contains(hit.id()), equalTo(false));