Я пытаюсь использовать API AggregationBuilders для ElasticSearch в java, чтобы найти суммы агрегаций. Но при использовании сервиса, использующего этот метод (AggregationBuilders.sum ()), выдается следующая ошибка: java.lang.NoSuchMethodError:org.elasticsearch.search.aggregations.AggregationBuilders.sum(Ljava/lang/String;)Lorg/elasticsearch/search/aggregations/metrics/SumAggregationBuilder;
Это мой файл pom.xml
<dependencies>
<!-- Elasticsearch dependencies -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch.plugin/transport-netty4-client -->
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>7.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<version>2.0.0.M2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.0.BUILD-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.1.5.RELEASE</version>
</dependency>
</dependencies>```
The service which is giving error is
Only the necessary imports are included in this explaination:
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.script.Script;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.composite.CompositeValuesSourceBuilder;
import org.elasticsearch.search.aggregations.bucket.composite.ParsedComposite;
import org.elasticsearch.search.aggregations.bucket.composite.TermsValuesSourceBuilder;
public List<AggregateDocument> compositeAggregation(SearchQuery query) throws IOException {
SearchRequest searchRequest = new SearchRequest(query.getIndex());
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
for (Map.Entry<String, AggregateQuery> aggregateQueryEntry: query.getAggregateQueryMap().entrySet()) {
List<CompositeValuesSourceBuilder<?>> sources = new ArrayList<>();
//Terms Query - Terms
Query termsQuery = aggregateQueryEntry.getValue().getTermsQuery();
for (Map.Entry<String,String> termsSourceEntry: termsQuery.getTerms().entrySet()){
TermsValuesSourceBuilder source = new TermsValuesSourceBuilder(termsSourceEntry.getKey());
source.field(termsSourceEntry.getValue()).missingBucket(true);
sources.add(source);
}
//CompositeAggregationBuilder compositeQuery = AggregationBuilders.composite(aggregateQueryEntry.getKey(), sources);
CompositeAggregationBuilder compositeQuery = new CompositeAggregationBuilder(aggregateQueryEntry.getKey(), sources);
compositeQuery.size(aggregateQueryEntry.getValue().getSize());
Query sumQuery = aggregateQueryEntry.getValue().getSumQuery();
Query filterQuery = aggregateQueryEntry.getValue().getFilterQuery();
//Terms Query - Script
for (Map.Entry<String,Script> termsScriptEntry: termsQuery.getScript().entrySet()){
AggregationBuilder subAggregation = AggregationBuilders.terms(termsScriptEntry.getKey()).script(termsScriptEntry.getValue());
compositeQuery.subAggregation(subAggregation);
}
//Sum Query - Terms
for (Map.Entry<String,String> sumSourceEntry: sumQuery.getTerms().entrySet()){
AggregationBuilder subAggregation = AggregationBuilders.sum(sumSourceEntry.getKey()).field(sumSourceEntry.getValue());
//AggregationBuilder subAggregation =new SumAggregationBuilder(sumSourceEntry.getKey()).field(sumSourceEntry.getValue());
compositeQuery.subAggregation(subAggregation);
}
//Sum Query - Script
for (Map.Entry<String,Script> sumScriptEntry: sumQuery.getScript().entrySet()){
AggregationBuilder subAggregation = AggregationBuilders.sum(sumScriptEntry.getKey()).script(sumScriptEntry.getValue());
compositeQuery.subAggregation(subAggregation);
}
//Filter Query - Terms
for (Map.Entry<String,String> filterSourceEntry: filterQuery.getTerms().entrySet()){
AggregationBuilder subAggregation = AggregationBuilders.sum(filterSourceEntry.getKey()).field(filterSourceEntry.getValue());
compositeQuery.subAggregation(subAggregation);
}
//Filter Query - Script
for (Map.Entry<String,Script> filterScriptEntry: filterQuery.getScript().entrySet()){
AggregationBuilder subAggregation = AggregationBuilders.sum(filterScriptEntry.getKey()).script(filterScriptEntry.getValue());
compositeQuery.subAggregation(subAggregation);
}
searchSourceBuilder.aggregation(compositeQuery);
}
BoolQueryBuilder queryBuilder = getBoolQueryBuilder(query);
searchSourceBuilder.query(queryBuilder).size(query.getSize());
searchRequest.source(searchSourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
return getCompositeAggregations(response);
}
getCompositeAggregations (), SearchQuery () - это определенные пользователем метод и классы. Скелет SearchQuery выглядит следующим образом:
@Getter
@AllArgsConstructor
public class SearchQuery {
String index;
int from;
int size;
Map<String, String> match;
Map<String, Boolean> boolMatch;
Map<String, Integer> intMatch;
String rangeFieldName;
Map<String, Number> term;
Map<String, Set<Number>> terms;
Map<String, AggregateQuery> aggregateQueryMap;
Map<String,String> stringTerm;
public SearchQuery() {
from = 0;
size = 1000;
match = new HashMap<>();
boolMatch = new HashMap<>();
intMatch = new HashMap<>();
term = new HashMap<>();
terms = new HashMap<>();
stringTerm= new HashMap<>();
aggregateQueryMap = new HashMap<>();
}
public SearchQuery(String index) {
this.index = index;
from = 0;
size = 1000;
match = new HashMap<>();
boolMatch = new HashMap<>();
intMatch = new HashMap<>();
term = new HashMap<>();
terms = new HashMap<>();
stringTerm= new HashMap<>();
aggregateQueryMap = new HashMap<>();
}
public void setSize(int size) { this.size = size; }
public void putMatch(String key, String val) {
this.match.put(key, val);
}
public void putBoolMatch(String key, Boolean val) {this.boolMatch.put(key, val);}
public void putIntMatch(String key, Integer val) {this.intMatch.put(key, val);}
public void putRangeFieldName(String fieldName) {this.rangeFieldName = fieldName;}
public void putTerm(String key, Number val) {
this.term.put(key, val);
}
public void putTerms(String key, Set<Number> val) {
this.terms.put(key, val);
}
public void putAggregate(String key, AggregateQuery val) {
this.aggregateQueryMap.put(key, val);
}
public void putStringTerm(String key, String value) {
this.stringTerm.put(key,value);
}
}
@Getter
@AllArgsConstructor
public class AggregateQuery {
int size;
Query termsQuery;
Query sumQuery;
Query filterQuery;
public AggregateQuery() {
size = 1000;
termsQuery = new Query();
sumQuery = new Query();
filterQuery = new Query();
}
public void setSize(int size) { this.size = size; }
public void putTermsQuery(String name, String field) { this.termsQuery.putTerms(name, field); }
public void putTermsQuery(String name, Script code) { this.termsQuery.putScript(name, code); }
public void putSumQuery(String name, String field) { this.sumQuery.putTerms(name, field); }
public void putSumQuery(String name, Script code) { this.sumQuery.putScript(name, code); }
public void putFilterQuery(String name, String field) { this.filterQuery.putTerms(name, field); }
public void putFilterQuery(String name, Script code) { this.filterQuery.putScript(name, code); }
}
До сих пор я пытался очистить .m2 и снова запустить чистую установку, но все же эта ошибка появляется. Буду признателен за любую помощь:
PS: После изменения pom я могу остановить установкуasticsearch 6.5, но 6.4.3 все еще устанавливается. Я хочу только версию 7.2. Любая идея, как найти зависимость, которая вызываетдругие версии для установки
новый модуль Pom of es
<!-- Elasticsearch dependencies -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch.plugin/transport-netty4-client -->
<!--<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>7.2.0</version>
</dependency>-->
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<version>2.0.0.M2</version>
<scope>compile</scope>
</dependency>-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.0.BUILD-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.1.5.RELEASE</version>
</dependency>
</dependencies>
Это проект агрегатора:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.vassarlabs.query-builder.proj</groupId>
<artifactId>query-builder-proj</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>es</module>
<module>ms</module>
</modules>
<properties>
<!-- These Properties are common for all spring R&D for maven build-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<javac.target>1.8</javac.target>
<javac.source>1.8</javac.source>
<spring-framework.version>5.1.0.BUILD-SNAPSHOT</spring-framework.version>
<spring-boot-version>2.1.0.BUILD-SNAPSHOT</spring-boot-version>
<kafka.version>1.1.0</kafka.version>
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.25</slf4j.version>
<junit.version> 4.12 </junit.version>
<testng.version> 6.10 </testng.version>
<java.version> 1.8 </java.version>
<maven.compiler.plugin.version> 3.3 </maven.compiler.plugin.version>
<maven.surefire.plugin.version> 2.10 </maven.surefire.plugin.version>
<maven.surefire.report.plugin.version>2.7.2 </maven.surefire.report.plugin.version>
<jackson.version>2.9.3</jackson.version>
<common.lang.version>2.4</common.lang.version>
<vassar.version>1.0-SNAPSHOT</vassar.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${common.lang.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<!-- <scope>provided</scope> -->
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
</dependencies>
<!--
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>```