diff --git a/.travis.yml b/.travis.yml index 4845ce15..f1f74dc3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ jdk: before_install: - sudo rm -rf /var/lib/elasticsearch - - curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-amd64.deb -o elasticsearch.deb && sudo dpkg -i --force-confnew elasticsearch.deb + - curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-amd64.deb -o elasticsearch.deb && sudo dpkg -i --force-confnew elasticsearch.deb - sudo cp ./src/test/resources/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml - sudo cat /etc/elasticsearch/elasticsearch.yml - sudo java -version diff --git a/pom.xml b/pom.xml index d7d77dfe..025d7911 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.nlpcn elasticsearch-sql - 8.14.3.0 + 8.15.0.0 jar Query elasticsearch using SQL elasticsearch-sql @@ -44,7 +44,7 @@ UTF-8 **/MainTestSuite.class sql - 8.14.3 + 8.15.0 org.elasticsearch.plugin.nlpcn.SqlPlug 1.2.15 32.0.0-jre diff --git a/src/main/java/org/elasticsearch/action/search/ParsedSearchResponse.java b/src/main/java/org/elasticsearch/action/search/ParsedSearchResponse.java index 7d882582..4466c6c7 100644 --- a/src/main/java/org/elasticsearch/action/search/ParsedSearchResponse.java +++ b/src/main/java/org/elasticsearch/action/search/ParsedSearchResponse.java @@ -8,6 +8,7 @@ package org.elasticsearch.action.search; +import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.util.concurrent.ConcurrentCollections; import org.elasticsearch.core.RefCounted; import org.elasticsearch.core.TimeValue; @@ -28,6 +29,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import static org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpectedToken; @@ -151,7 +153,7 @@ public static SearchResponse innerFromXContent(XContentParser parser) throws IOE tookInMillis, failures.toArray(ShardSearchFailure.EMPTY_ARRAY), clusters, - searchContextId + Objects.nonNull(searchContextId) ? new BytesArray(searchContextId) : null )); } diff --git a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/ClusterStateActionHandler.java b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/ClusterStateActionHandler.java index 0428913b..66ce7a85 100644 --- a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/ClusterStateActionHandler.java +++ b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/ClusterStateActionHandler.java @@ -37,6 +37,7 @@ import org.elasticsearch.common.unit.RelativeByteSizeValue; import org.elasticsearch.common.xcontent.XContentParserUtils; import org.elasticsearch.health.metadata.HealthMetadata; +import org.elasticsearch.index.IndexVersion; import org.elasticsearch.index.shard.IndexLongFieldRange; import org.elasticsearch.xcontent.XContentParser; @@ -83,6 +84,7 @@ public class ClusterStateActionHandler extends ActionHandler builder.masterTimeout(Time.of(t -> t.time(e.toString())))); - Optional.ofNullable(clusterUpdateSettingsRequest.timeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); + Optional.ofNullable(clusterUpdateSettingsRequest.ackTimeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); return builder.build(); } diff --git a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/CreateIndexActionHandler.java b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/CreateIndexActionHandler.java index 5ead5b5e..bd0efa74 100644 --- a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/CreateIndexActionHandler.java +++ b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/CreateIndexActionHandler.java @@ -53,7 +53,7 @@ protected CreateIndexRequest convertRequest(org.elasticsearch.action.admin.indic builder.index(createIndexRequest.index()); builder.mappings(fromJson(createIndexRequest.mappings(), TypeMapping._DESERIALIZER)); builder.settings(fromJson(createIndexRequest.settings().toString(), IndexSettings._DESERIALIZER)); - Optional.ofNullable(createIndexRequest.timeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); + Optional.ofNullable(createIndexRequest.ackTimeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); Optional.ofNullable(createIndexRequest.masterNodeTimeout()).ifPresent(e -> builder.masterTimeout(Time.of(t -> t.time(e.toString())))); ActiveShardCount activeShardCount = createIndexRequest.waitForActiveShards(); if (Objects.nonNull(activeShardCount) && activeShardCount.value() > -1) { diff --git a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/DeleteIndexActionHandler.java b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/DeleteIndexActionHandler.java index f2ee8b7d..3fe5c3ad 100644 --- a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/DeleteIndexActionHandler.java +++ b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/DeleteIndexActionHandler.java @@ -39,7 +39,7 @@ protected DeleteIndexRequest convertRequest(org.elasticsearch.action.admin.indic DeleteIndexRequest.Builder builder = new DeleteIndexRequest.Builder(); builder.index(Arrays.asList(deleteIndexRequest.indices())); Optional.ofNullable(deleteIndexRequest.masterNodeTimeout()).ifPresent(e -> builder.masterTimeout(Time.of(t -> t.time(e.toString())))); - Optional.ofNullable(deleteIndexRequest.timeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); + Optional.ofNullable(deleteIndexRequest.ackTimeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); Optional.ofNullable(deleteIndexRequest.indicesOptions()).ifPresent(options -> { builder.allowNoIndices(options.allowNoIndices()); builder.ignoreUnavailable(options.ignoreUnavailable()); diff --git a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/PutMappingActionHandler.java b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/PutMappingActionHandler.java index 15ebc72a..03f647d2 100644 --- a/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/PutMappingActionHandler.java +++ b/src/main/java/org/elasticsearch/plugin/nlpcn/client/handler/PutMappingActionHandler.java @@ -54,7 +54,7 @@ protected PutMappingRequest convertRequest(org.elasticsearch.action.admin.indice builder.ignoreUnavailable(options.ignoreUnavailable()); builder.expandWildcards(getExpandWildcard(options.wildcardOptions())); }); - Optional.ofNullable(putMappingRequest.timeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); + Optional.ofNullable(putMappingRequest.ackTimeout()).ifPresent(e -> builder.timeout(Time.of(t -> t.time(e.toString())))); Optional.ofNullable(putMappingRequest.masterNodeTimeout()).ifPresent(e -> builder.masterTimeout(Time.of(t -> t.time(e.toString())))); return builder.build(); } diff --git a/src/main/java/org/nlpcn/es4sql/domain/SearchResult.java b/src/main/java/org/nlpcn/es4sql/domain/SearchResult.java index 3c289c7c..60e4cd15 100644 --- a/src/main/java/org/nlpcn/es4sql/domain/SearchResult.java +++ b/src/main/java/org/nlpcn/es4sql/domain/SearchResult.java @@ -1,14 +1,8 @@ package org.nlpcn.es4sql.domain; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.common.document.DocumentField; +import org.elasticsearch.common.util.Maps; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.Aggregation; @@ -23,6 +17,13 @@ import org.elasticsearch.search.aggregations.metrics.InternalValueCount; import org.nlpcn.es4sql.exception.SqlParseException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + public class SearchResult { /** * 查询结果 @@ -60,7 +61,7 @@ public SearchResult(SearchResponse resp, Select select) throws SqlParseException this.total = buckets.size(); results = new ArrayList<>(buckets.size()); for (Bucket bucket : buckets) { - Map aggsMap = toAggsMap(bucket.getAggregations().getAsMap()); + Map aggsMap = toAggsMap(bucket.getAggregations().asList()); aggsMap.put("docCount", bucket.getDocCount()); results.add(aggsMap); } @@ -97,15 +98,15 @@ private Map toFieldsMap(Map fields) { /** * 讲es的field域转换为你Object - * - * @param fields + * + * @param aggregations * @return * @throws SqlParseException */ - private Map toAggsMap(Map fields) throws SqlParseException { - Map result = new HashMap<>(); - for (Entry entry : fields.entrySet()) { - result.put(entry.getKey(), covenValue(entry.getValue())); + private Map toAggsMap(List aggregations) throws SqlParseException { + Map result = Maps.newMapWithExpectedSize(aggregations.size()); + for (InternalAggregation aggregation : aggregations) { + result.put(aggregation.getName(), covenValue(aggregation)); } return result; } diff --git a/src/test/java/org/nlpcn/es4sql/AggregationTest.java b/src/test/java/org/nlpcn/es4sql/AggregationTest.java index 04fc65d5..54591970 100644 --- a/src/test/java/org/nlpcn/es4sql/AggregationTest.java +++ b/src/test/java/org/nlpcn/es4sql/AggregationTest.java @@ -4,8 +4,10 @@ import com.google.common.collect.DiscreteDomain; import com.google.common.collect.Range; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.common.util.Maps; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; +import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.bucket.filter.Filters; import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilter; @@ -201,8 +203,13 @@ public void percentileTestSpecific() throws IOException, SqlParseException, SQLF @Test public void aliasTest() throws IOException, SqlParseException, SQLFeatureNotSupportedException { InternalAggregations result = query(String.format("SELECT COUNT(*) AS mycount FROM %s", TEST_INDEX_ACCOUNT)); - assertThat(result.asMap(), hasKey("mycount")); - } + List aggregations = result.asList(); + Map aggregationsAsMap = Maps.newMapWithExpectedSize(aggregations.size()); + for (InternalAggregation aggregation : aggregations) { + aggregationsAsMap.put(aggregation.getName(), aggregation); + } + assertThat(aggregationsAsMap, hasKey("mycount")); + } @Test public void groupByTest() throws Exception {