diff --git a/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java b/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java index 4fbff911762..83a19053f22 100644 --- a/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java +++ b/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java @@ -1903,40 +1903,6 @@ public class SearchQueryIT extends ESIntegTestCase { assertFirstHit(searchResponse, hasId("1")); } - @Test - public void testIndicesFilter() throws Exception { - createIndex("index1", "index2", "index3"); - - client().prepareIndex("index1", "type1").setId("1").setSource("text", "value1").get(); - client().prepareIndex("index2", "type2").setId("2").setSource("text", "value2").get(); - client().prepareIndex("index3", "type3").setId("3").setSource("text", "value3").get(); - refresh(); - - SearchResponse searchResponse = client().prepareSearch("index1", "index2", "index3") - .setPostFilter(indicesQuery(termQuery("text", "value1"), "index1") - .noMatchQuery(termQuery("text", "value2"))).get(); - assertHitCount(searchResponse, 2l); - assertSearchHits(searchResponse, "1", "2"); - - //default no match filter is "all" - searchResponse = client().prepareSearch("index1", "index2", "index3") - .setPostFilter(indicesQuery(termQuery("text", "value1"), "index1")).get(); - assertHitCount(searchResponse, 3l); - assertSearchHits(searchResponse, "1", "2", "3"); - - searchResponse = client().prepareSearch("index1", "index2", "index3") - .setPostFilter(indicesQuery(termQuery("text", "value1"), "index1") - .noMatchQuery("all")).get(); - assertHitCount(searchResponse, 3l); - assertSearchHits(searchResponse, "1", "2", "3"); - - searchResponse = client().prepareSearch("index1", "index2", "index3") - .setPostFilter(indicesQuery(termQuery("text", "value1"), "index1") - .noMatchQuery("none")).get(); - assertHitCount(searchResponse, 1l); - assertFirstHit(searchResponse, hasId("1")); - } - @Test // https://github.com/elasticsearch/elasticsearch/issues/2416 public void testIndicesQuerySkipParsing() throws Exception { createIndex("simple"); @@ -1969,37 +1935,6 @@ public class SearchQueryIT extends ESIntegTestCase { assertSearchHits(searchResponse, "1", "2"); } - @Test // https://github.com/elasticsearch/elasticsearch/issues/2416 - public void testIndicesFilterSkipParsing() throws Exception { - createIndex("simple"); - assertAcked(prepareCreate("related") - .addMapping("child", jsonBuilder().startObject().startObject("child").startObject("_parent").field("type", "parent") - .endObject().endObject().endObject())); - - indexRandom(true, - client().prepareIndex("simple", "lone").setId("1").setSource("text", "value1"), - client().prepareIndex("related", "parent").setId("2").setSource("text", "parent"), - client().prepareIndex("related", "child").setId("3").setParent("2").setSource("text", "value2")); - - //has_child fails if executed on "simple" index - try { - client().prepareSearch("simple") - .setPostFilter(hasChildQuery("child", termQuery("text", "value1"))).get(); - fail("Should have failed as has_child query can only be executed against parent-child types"); - } catch (SearchPhaseExecutionException e) { - assertThat(e.shardFailures().length, greaterThan(0)); - for (ShardSearchFailure shardSearchFailure : e.shardFailures()) { - assertThat(shardSearchFailure.reason(), containsString("No mapping for for type [child]")); - } - } - - SearchResponse searchResponse = client().prepareSearch("related", "simple") - .setPostFilter(indicesQuery(hasChildQuery("child", termQuery("text", "value2")), "related") - .noMatchQuery(termQuery("text", "value1"))).get(); - assertHitCount(searchResponse, 2l); - assertSearchHits(searchResponse, "1", "2"); - } - @Test public void testIndicesQueryMissingIndices() throws IOException, ExecutionException, InterruptedException { createIndex("index1"); @@ -2069,79 +2004,6 @@ public class SearchQueryIT extends ESIntegTestCase { } } - @Test - public void testIndicesFilterMissingIndices() throws IOException, ExecutionException, InterruptedException { - createIndex("index1"); - createIndex("index2"); - createIndex("index3"); - - indexRandom(true, - client().prepareIndex("index1", "type1", "1").setSource("field", "match"), - client().prepareIndex("index1", "type1", "2").setSource("field", "no_match"), - client().prepareIndex("index2", "type1", "10").setSource("field", "match"), - client().prepareIndex("index2", "type1", "20").setSource("field", "no_match"), - client().prepareIndex("index3", "type1", "100").setSource("field", "match"), - client().prepareIndex("index3", "type1", "200").setSource("field", "no_match")); - - //all indices are missing - SearchResponse searchResponse = client().prepareSearch().setQuery( - filteredQuery(matchAllQuery(), - indicesQuery(termQuery("field", "missing"), "test1", "test2", "test3") - .noMatchQuery(termQuery("field", "match")))).get(); - - assertHitCount(searchResponse, 3l); - - for (SearchHit hit : searchResponse.getHits().getHits()) { - if ("index1".equals(hit.index())) { - assertThat(hit, hasId("1")); - } else if ("index2".equals(hit.index())) { - assertThat(hit, hasId("10")); - } else if ("index3".equals(hit.index())) { - assertThat(hit, hasId("100")); - } else { - fail("Returned documents should belong to either index1, index2 or index3"); - } - } - - //only one index specified, which is missing - searchResponse = client().prepareSearch().setQuery( - filteredQuery(matchAllQuery(), - indicesQuery(termQuery("field", "missing"), "test1") - .noMatchQuery(termQuery("field", "match")))).get(); - - assertHitCount(searchResponse, 3l); - - for (SearchHit hit : searchResponse.getHits().getHits()) { - if ("index1".equals(hit.index())) { - assertThat(hit, hasId("1")); - } else if ("index2".equals(hit.index())) { - assertThat(hit, hasId("10")); - } else if ("index3".equals(hit.index())) { - assertThat(hit, hasId("100")); - } else { - fail("Returned documents should belong to either index1, index2 or index3"); - } - } - - //more than one index specified, one of them is missing - searchResponse = client().prepareSearch().setQuery( - filteredQuery(matchAllQuery(), - indicesQuery(termQuery("field", "missing"), "index1", "test1") - .noMatchQuery(termQuery("field", "match")))).get(); - - assertHitCount(searchResponse, 2l); - - for (SearchHit hit : searchResponse.getHits().getHits()) { - if ("index2".equals(hit.index())) { - assertThat(hit, hasId("10")); - } else if ("index3".equals(hit.index())) { - assertThat(hit, hasId("100")); - } else { - fail("Returned documents should belong to either index2 or index3"); - } - } - } - @Test public void testMinScore() throws ExecutionException, InterruptedException { createIndex("test"); diff --git a/distribution/pom.xml b/distribution/pom.xml index 80bbc98fe6e..9a01416ba30 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -111,8 +111,7 @@ Running license check - - diff --git a/distribution/src/main/packaging/scripts/postrm b/distribution/src/main/packaging/scripts/postrm index 1b44d3a8b38..3dfc52e4474 100644 --- a/distribution/src/main/packaging/scripts/postrm +++ b/distribution/src/main/packaging/scripts/postrm @@ -68,7 +68,7 @@ fi if [ "$REMOVE_SERVICE" = "true" ]; then if command -v systemctl >/dev/null; then - systemctl --no-reload disable elasticsearch.service > /dev/null 2>&1 || true + systemctl disable elasticsearch.service > /dev/null 2>&1 || true fi if command -v chkconfig >/dev/null; then diff --git a/distribution/src/test/resources/packaging/scripts/40_rpm_package.bats b/distribution/src/test/resources/packaging/scripts/40_rpm_package.bats index 6a9007e4bbe..6d8aff66410 100644 --- a/distribution/src/test/resources/packaging/scripts/40_rpm_package.bats +++ b/distribution/src/test/resources/packaging/scripts/40_rpm_package.bats @@ -116,11 +116,6 @@ setup() { # The removal must disable the service # see prerm file if is_systemd; then - # Redhat based systemd distros usually returns exit code 1 - # OpenSUSE13 returns 0 - run systemctl status elasticsearch.service - [ "$status" -eq 1 ] || [ "$status" -eq 0 ] - run systemctl is-enabled elasticsearch.service [ "$status" -eq 1 ] fi diff --git a/docs/reference/aggregations/bucket/histogram-aggregation.asciidoc b/docs/reference/aggregations/bucket/histogram-aggregation.asciidoc index 77e510d8b1c..bc8a6e13ffd 100644 --- a/docs/reference/aggregations/bucket/histogram-aggregation.asciidoc +++ b/docs/reference/aggregations/bucket/histogram-aggregation.asciidoc @@ -20,6 +20,11 @@ bucket_key = value - rem From the rounding function above it can be seen that the intervals themselves **must** be integers. +WARNING: Currently, values are cast to integers before being bucketed, which +might cause negative floating-point values to fall into the wrong bucket. For +instance, `-4.5` with an interval of `2` would be cast to `-4`, and so would +end up in the `-4 <= val < -2` bucket instead of the `-6 <= val < -4` bucket. + The following snippet "buckets" the products based on their `price` by interval of `50`: [source,js] diff --git a/docs/reference/cluster/reroute.asciidoc b/docs/reference/cluster/reroute.asciidoc index d033aee7d67..cc4dffa612a 100644 --- a/docs/reference/cluster/reroute.asciidoc +++ b/docs/reference/cluster/reroute.asciidoc @@ -70,3 +70,8 @@ The commands supported are: allocate the shard to. It also accepts `allow_primary` flag to explicitly specify that it is allowed to explicitly allocate a primary shard (might result in data loss). + +WARNING: The `allow_primary` parameter will force a new _empty_ primary shard +to be allocated *without any data*. If a node which has a copy of the original +primary shard (including data) rejoins the cluster later on, that data will be +deleted: the old shard copy will be replaced by the new live shard copy.