gpt4 book ai didi

java - 如何重现 ElasticSearch 查询?

转载 作者:行者123 更新时间:2023-12-01 18:15:46 25 4
gpt4 key购买 nike

我有 ElasticSearch 查询,通过 Kibana 获取数据。我的 Java 应用程序中也需要相同的请求。Kibana 生成的查询如下:

{
"version": true,
"size": 500,
"sort": [
{
"@timestamp": {
"order": "desc",
"unmapped_type": "boolean"
}
}
],
"_source": {
"excludes": []
},
"aggs": {
"2": {
"date_histogram": {
"field": "@timestamp",
"fixed_interval": "30s",
"time_zone": "Europe/Berlin",
"min_doc_count": 1
}
}
},
"stored_fields": [
"*"
],
"script_fields": {},
"docvalue_fields": [
{
"field": "@timestamp",
"format": "date_time"
}
],
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "ORDERID=120019",
"analyze_wildcard": true,
"time_zone": "Europe/Berlin"
}
}
],
"filter": [
{
"match_phrase": {
"service": {
"query": "some-service-app"
}
}
},
{
"range": {
"@timestamp": {
"format": "strict_date_optional_time",
"gte": "2020-02-24T09:12:41.685Z",
"lte": "2020-02-24T09:27:41.685Z"
}
}
}
],
"should": [],
"must_not": []
}
},
"highlight": {
"pre_tags": [
"@kibana-highlighted-field@"
],
"post_tags": [
"@/kibana-highlighted-field@"
],
"fields": {
"*": {}
},
"fragment_size": 2147483647
}
}

我尝试使用 ElasticSearch Java API 编写相同的查询,但得到完全不同的结果,根本与预期输出不匹配。

你能帮我想出一个正确的吗?我现在的做法如下。

    final QueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.simpleQueryStringQuery("some-service-app").field("service"))
.must(QueryBuilders.simpleQueryStringQuery("INFO").field("severity"))
.must(QueryBuilders.rangeQuery("@timestamp").from(now.minusDays(15)))
.must(QueryBuilders.simpleQueryStringQuery("ORDERID=120019"));
final SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(query);
final SearchRequest searchRequest = new SearchRequest(targetIndexName);
searchRequest.source(sourceBuilder);
final SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);

不幸的是,即使“服务”值错误,我的代码也会返回错误的结果。

您能帮我将 Java 请求与 JSON 请求保持一致吗?

最佳答案

1) 分数不会相同。过滤器不计入分数,但在您的 java 代码中,您使用查询代替,因此排序会有所不同。

阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html

2)我认为您不想准确地重现 kibana 的查询。例如,我在 json 中没有找到“严重性”字段,并且您的 java 中缺少聚合部分,您到底在寻找什么?...请分享您的映射

3) 请比较 kibana 和您的文档时间戳之间的日期时间。有时,随着时区的不同,kibana 显示不同的时间。

4)正如评论中所说,调试时必须有生成的JSON,这可以帮助你。

关于java - 如何重现 ElasticSearch 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60373273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com