我在这里看到了你们为下面给出的链接提供解决方案的帖子。ElasticSearch Java API从查询生成器中获取不同的值
有没有办法通过org获得不同的电子邮件。弹性搜索。客户RestHighLevelClient
?你能帮我解决这个问题吗?我试了很多方法,但都没能解决。但我可以在SQL Workbench中实现同样的功能,下面使用Kibana translator给出了等效的json查询。
SELECT DISTINCT email_client.keyword
FROM email_reference;
等效Elasticsearch查询如下:
{
"from": 0,
"size": 0,
"_source": {
"includes": ["email_client.keyword"],
"excludes": []
},
"stored_fields": "email_client.keyword",
"aggregations": {
"email_client.keyword": {
"terms": {
"field": "email_client.keyword",
"size": 200,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
}
}
}
}
所以现在我想形成这个JSON查询使用RestHighLevelClient,我已经尝试过,但问题是准备搜索()是不是有在RestHighLevelClient有任何其他实现使用RestHighLevelClient?
对于7.11.2版本的elasticsearch-rest-高级-客户端,下面的例子对我有效。您需要为带有关键字的字段设置聚合。
private List<String> queryForDistinctMetadata(String aggregationKey, String field) throws IOException {
var aggregationBuilder = AggregationBuilders
.terms(aggregationKey)
.field(field);
var searchSourceBuilder = new SearchSourceBuilder()
.aggregation(aggregationBuilder)
.size(0);
var searchRequest = new SearchRequest()
.indices("<your index here>")
.source(searchSourceBuilder);
var response = client.search(searchRequest, RequestOptions.DEFAULT);
var aggregation = (ParsedStringTerms) response.getAggregations().get(aggregationKey);
return aggregation.getBuckets()
.parallelStream()
.map(Terms.Bucket::getKeyAsString)
.collect(Collectors.toList());
}
这应该适用于RestHighLevelClient:
MultiSearchRequest multiRequest = new MultiSearchRequest();
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(0); // return only aggregation results
searchSourceBuilder.aggregation(AggregationBuilders.terms("label_agg").field("email_client.keyword").size(200));
searchRequest.indices("email_reference"); // index name
searchRequest.source(searchSourceBuilder);
multiRequest.add(searchRequest);
MultiSearchResponse response = restHighLevelClient.msearch(multiRequest, RequestOptions.DEFAULT);
问题内容: 在Elasticsearch的索引中,我保存了约30000个实体。我想使用RestHighLevelClient获得它们的所有ID。我读过,最好的方法是使用滚动API。但是,当我这样做时,我只能接收大约10个实体,而不是30k。如何解决这个问题 当我这样做时,executeQuery仅返回大约11个实体。如何解决,如何获取索引中的所有文件? 问题答案: 尝试按照以下示例操作,我正在使用
问题内容: 我有一个SQL查询,该查询对3-4个表执行JOIN操作以获取数据。现在,我们正转向elasticsearch以获得更好的性能。如何使用elasticsearch复制相同的JOIN查询?我已经阅读了有关父/子文档的信息,但是我的数据没有任何严格的父/子类型的数据。 问题答案: Elasticsearch不支持JOIN,这首先是NoSQL技术的全部目的。有多种方法可以使用父/子关系(如您所
这可能很容易,但不知道怎么做。 我有一个表,可以为特定的非键列字段重复值。如何使用query Builder或Eloquent编写SQL查询,以获取该列具有不同值的行? 请注意,我不是只获取该列,它与其他列值结合在一起,所以可能无法真正工作。因此,这个问题基本上可以是如何指定我想在查询中区分的列,现在不接受任何参数?
我正在尝试使用Rest-Asure和Java为GET API创建测试自动化。 此API具有以下响应主体: 在此API响应中有两个同名“id”的字段。如何获取这两个字段的值? 谢谢
Elastic现在正在更新他们的文档,以便使用带有Java的RestHighLevelClient。它还有一个映射API: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-put-mapping.html 还是RestHighLevelClient用于高性能操作,但对于初始配置
使用RestHighLevelRestClient使用ElasticSearch批量插入时出现异常。 ElasticsearchStatusException[无法解析响应体];嵌套:ResponseException[method[POST],host[http:x.com],URI[/_bulk?timeout=1m],状态行[http/1.1 413请求实体太大]{“消息”:“请求大小超过1