我使用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) 我想你不想重复基巴纳的提问。例如,我在json中没有找到“严重性”字段,java中缺少聚合部分,您到底在寻找什么?。。。。请分享你的映射
3) 请比较kibana和您的文档时间戳之间的日期时间。有时在时区中,kibana显示不同的时间。
4)正如注释中所说,调试时必须有生成的JSON,这可以帮助你。
问题内容: 当存储一些文档时,它应该存储不存在的文档并忽略其余文档(应该在应用程序级别完成,也许检查文档的ID是否已经存在,等等?) 问题答案: 这是文档中说明的内容: 操作类型 索引操作还接受可用于强制执行创建操作的op_type,从而允许“如果不存在”行为。使用create时,如果索引中已经存在具有该ID的文档,则索引操作将失败。 这是使用op_type参数的示例: 指定create的另一个选
我有一个索引,其中一些文档有一个名为“access_type”的字段。它可以有两个值,要么是“教师”,要么是“学生”。对于“access_type”的值为“afully”的文档,将有另一个名为“faculties”的字段,这是一个学院名称列表。因此,一个示例文档如下所示: 现在,如果我们有两个输入,比如说一个用于access_type,另一个用于facculties。如果我得到以下输入“facul
问题内容: 我如何询问我的Elasticsearch服务器目前有多少个连接打开? 这和插座数一样吗?(我也不知道如何获得这些数字) 这与客户端的数量不同,对,因为每个客户端都可以打开多个连接? 虽然我确实发现您可以在Elasticsearch客户端上为每个客户端指定一个maxSockets,但找不到任何信息:https ://www.elastic.co/guide/en/elasticsearc
我是Elasticsearch新手,对匹配查询的工作方式感到困惑。我有以下映射: 我批量导入了以下文档 我验证了所有文档都已成功加载。然后我执行匹配查询: 它只返回#1文档。我在这里感到困惑。为什么它不返回所有三个文档?我应该使用什么查询来返回这三个文档,因为它们在字段中都有“quiet”根单词? 谢谢和问候。
问题内容: 我已经在Elasticsearch之上构建了一个Web应用程序。我想使用Java进行多重过滤。 Elasticsearch查询: 我想过滤查询,以便它应该在具有两个不同值(例如“ xyz”和“ abc”)的同一字段上进行过滤 现在,我已经为单个过滤器编写了Java程序。 如何在同一字段上为多个值过滤查询? 编辑 : 实际上,在我的Web应用程序中,我将集合的值提取为: 收藏是我的Ela
问题内容: 当我将Flashlight与Firebase结合使用并通过直接查询进行Elastic搜索时,它确实起作用: 询问 码 但是,当我希望不仅限于10条提示时,此操作将失败(无结果) 询问 码 我使用Flashlight示例中提供的选项,并为option添加零件: 为什么可以在https://github.com/firebase/flashlight/issues/29#issuecomm