我是弹性搜索的新手。开始使用 Elastic 搜索构建 Spring Boot 应用程序。
使用最新的 ES 版本“elasticsearch-7.7.1”并进行集成,我使用以下 maven 依赖项:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.7.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我在应用程序启动时遇到了问题,通过添加以下依赖项来解决:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.7.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么elasticsearch-rest-client需要以及它与elasticsearch-rest-high-level-client?
java maven spring-boot elasticsearch-rest-client elasticsearch-high-level-restclient
我是弹性搜索的新手。我们正在使用弹性搜索构建一个 Spring 启动应用程序。
为了集成我的 Spring Boot 应用程序,我们可以使用elasticsearch-rest-high-level-client或spring-boot-starter-data-elasticsearch.
任何人都可以详细说明哪个选项总体上更好,为什么?
java maven elasticsearch spring-boot elasticsearch-high-level-restclient
我想了解我是否需要将负载均衡器作为 Elasticsearch 部署的一部分,或者是否被认为是一种良好实践。
据我了解,Elasticsearch 的高级 REST 客户端和传输客户端可以管理节点之间的负载平衡。因此,客户端需要逗号分隔的端点列表,仅此而已。
中间还有负载均衡器还有什么意义吗?对于哪种情况它可能有用?每种方法的优缺点?
java load-balancing high-availability elasticsearch elasticsearch-high-level-restclient
因此,我已经能够使用elasticsearch高级restclient在Java中根据需要复制elasticsearch查询。问题是我无法检索我想要的值。在提供代码之前,我想解决总体目标,以防有更简单的解决方案(似乎这不必那么困难。)
总体目标:获取“推荐者”字段中每个唯一值“已访问”==true 的文档数量。
我当前的状态:我已经能够在 kibana/elasticsearch 中编写具有所需输出的查询,但是当我在 Java 中复制此查询时,我无法访问我需要的数据。(使用 searchRequest.source().toString 进行验证())。
这是查询:
{
"aggs":{
"recommenderIDs": {
"terms": {
"field": "recommender"
},
"aggs": {
"visit_stats": {
"filters": {
"filters": {
"visited": {
"match":{
"visited": true
}
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我的 java 代码中的内容:
// ...
SearchRequest searchRequest = new SearchRequest(INDEX_REC_RECOMMENDATIONS);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
String aggregationName = "recommenderId";
String filterName = "wasVisited";
TermsAggregationBuilder aggQuery = AggregationBuilders
.terms(aggregationName)
.field(RecommendationRepoFieldNames.RECOMMENDER);
AggregationBuilder aggFilters = AggregationBuilders.filters(
filterName,
new FiltersAggregator.KeyedFilter(
RecommendationRepoFieldNames.RECOMMENDER,
QueryBuilders.termQuery(RecommendationRepoFieldNames.VISITED, …Run Code Online (Sandbox Code Playgroud)