当前位置: 首页 > 知识库问答 >
问题:

在WM机器上使用Elasticsearch服务器Javaelasticsearch API

邬令
2023-03-14

我从4.4.1KibanaElasticsearch做一个查询,看起来像这样:

{
  "size": 0,
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "FALK0911622560T",
          "analyze_wildcard": true
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "@timestamp": {
                  "gte": 1438290000000,
                  "lte": 1440968400000,
                  "format": "epoch_millis"
                }
              }
            }
          ],
          "must_not": []
        }
      }
    }
  },
  "aggs": {
    "2": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "1w",
        "time_zone": "Europe/Helsinki",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1438290000000,
          "max": 1440968400000
        }
      },
      "aggs": {
        "1": {
          "percentiles": {
            "field": "Quantity",
            "percents": [
              50
            ]
          }
        }
      }
    }
  }
}

这段代码将返回给定时间间隔内“ProductCode”=FALK091162560T”的所有文档。

我用Elasticsearch Java API尝试了同样的方法,代码如下:

        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery(matchQueryKey,matchQueryValue));

        SearchResponse response = client.prepareSearch(indexName)
                .setTypes(indexTypeName)
                .setQuery(boolQueryBuilder)
                .setSize(100)
                .addAggregation(AggregationBuilders
                        .dateHistogram("myHistogram")
                        .field("@timestamp")
                        .interval(DateHistogramInterval.WEEK)
                        .timeZone("Europe/Helsinki")
                        .minDocCount(1)
                        .extendedBounds(1438290000000L, 1440968400000L))
                .addFields(fieldsOfInterest)
                .execute()
                .actionGet();

        response.getAggregations();

但我得到了索引中所有“ProductCode”=FALK091162560T的文档。

在给定的时间内,我应该只有5份回复文件。getAgregations()因为我将间隔设置为周。

Elasticsearch中的文档如下所示:

{
  "_index": "warehouse-550",
  "_type": "core2",
  "_id": "AVOKCqQ68h4KkDGZvk6b",
  "_score": null,
  "_source": {
    "message": "5,550,67.01,FALK0911622560T,2015-07-31;08:00:00.000\r",
    "@version": "1",
    "@timestamp": "2015-07-31T06:00:00.000Z",
    "path": "D:/Programs/Logstash/x_testingLocally/processed-stocklevels-550-25200931072015.csv",
    "host": "EVO385",
    "type": "core2",
    "Quantity": 5,
    "Warehouse": "550",
    "Price": 67.01,
    "ProductCode": "FALK0911622560T",
    "Timestamp": "2015-07-31;08:00:00.000"
  },
  "fields": {
    "@timestamp": [
      1438322400000
    ]
  },
  "highlight": {
    "ProductCode": [
      "@kibana-highlighted-field@FALK0911622560T@/kibana-highlighted-field@"
    ],
    "message": [
      "5,550,67.01,@kibana-highlighted-field@FALK0911622560T@/kibana-highlighted-field@,2015-07-31;08:00:00.000\r"
    ]
  },
  "sort": [
    1438322400000
  ]
}

请帮忙。谢谢你。

共有1个答案

公冶鸣
2023-03-14

您没有添加范围查询。将您的boolQueryBuilder更改为以下内容:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery(matchQueryKey,matchQueryValue)).must(QueryBuilders.rangeQuery("@timestamp").gte(fromValue).lte(toValue));

您可以使用以下方法获取桶:

InternalDateHistogram histogram = searchResponse.getAggregations().getAsMap().get(aggregation_name);
List bucketList = histogram?.getBuckets()
 类似资料:
  • 我试图在我的本地开发机器上安装graylog2服务器,但在elasticsearch设置中遇到了问题。 我的elasticsearch作为一项服务安装在我的dev机器上运行的流浪机器上。因此,我的elasticsearch没有安装在127.0.0.1中,而是安装在192.168.50.4(vagrant机器的ip)中,我有从vagrant机器转发的端口9200,但graylog2服务器似乎找不到它

  • 我试图集成elasticsearch与生产,但得到以下例外。jvm我在两个服务器1.7使用。0_40 2015-01-12 21:29:06调试netty:94-[Whitemane,Aelfyre]已连接到节点[[#transport#-1][inet[/xxx.xxx.xx.xxx:9300]]2015-01-12 21:29:06警告netty:114-[Whitemane,Aelfyre]

  • 我有以下场景。我需要在Android上有一个嵌入式数据库(nosql),我在服务器上有一个主数据库(理想情况下应该是nosql数据库)。两者之间需要同步。所有来自移动端的查询都将转到迭代数据库。我们有不同的选项:1)在移动端使用couchDB,同时在服务器端使用couchDB,2)在移动端使用couchDB,在服务器端使用Mongodb,3)在移动端使用sqlLite,在服务器端使用Mongodb

  • 问题内容: 我正在尝试建立一个PHP网站,并且想要测试我的PHP文件而不将其上传到主机。在上载它们之前,基本上在我自己的机器上对其进行测试。我怎么做? 问题答案: 安装并运行XAMPP:http : //www.apachefriends.org/en/xampp.html

  • 我有一个centos机器/服务器,我想在其中运行多个docker容器实例,其中有docker-machines和virtualbox驱动程序,用于测试目的。这是可行的吗? 我有一张最新Centos7的docker图像。然后我跑了

  • 问题内容: 背景 我正在尝试将条纹付款集成到我的网站中。我需要使用我的专用条纹密钥创建一个条纹用户。我将此密钥存储在服务器上,并调用服务器方法来创建用户。也许还有另一种方法可以做到这一点? 我的尝试和结果 我一直在使用相同的客户端代码和不同的服务器代码。所有尝试都会立即在客户端的console.log(…)上给出undefined,但在服务器的console.log(…)上给出正确的响应: 我也尝