elasticsearch 使用Logstash索引ElasticSearch结果,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 使用Logstash索引ElasticSearch结果,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 使用Logstash索引ElasticSearch结果

elasticsearch 使用Logstash索引ElasticSearch结果,elasticsearch,logstash,elasticsearch,Logstash,我有以下索引: POST /cars/transactions/_bulk { "index": {}} { "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" } { "index": {}} { "price&

我有以下索引:

POST /cars/transactions/_bulk
{ "index": {}}
{ "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" }
{ "index": {}}
{ "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" }
{ "index": {}}
{ "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" }
{ "index": {}}
{ "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }
我正在执行以下搜索:

GET /cars/transactions/_search
{
    "size" : 0,
    "aggs" : { 
        "popular_colors" : { 
            "terms" : { 
              "field" : "color"
            }
        }
    }
}
我收到的答复如下:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 8,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "popular_colors": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "red",
          "doc_count": 4
        },
        {
          "key": "blue",
          "doc_count": 2
        },
        {
          "key": "green",
          "doc_count": 2
        }
      ]
    }
  }
}
我的问题是,如何将该文档重新索引到不同的索引中

我试过:

input {
  elasticsearch {
    hosts => "localhost"
    index => "cars"
    query => '{
    "size" : 0,
    "aggs" : { 
        "popular_colors" : { 
            "terms" : { 
              "field" : "color"
            }
        }
    }
}'
    size => 500
    scroll => "5m"
    docinfo => true
  }
}
但是它不起作用,因为插件的搜索类型是scan,它不支持聚合

我还尝试:

input {
 file {
  path => "C:\ELK-STACK\logstash-2.3.4\bin\out.json"
  start_position => "beginning"
  codec => json_lines }
  }
其中out.json的内容为:

{“take”:1,“timed\u out”:false,{“shards”:{“total”:5,“successful”:5,“failed”:0},“hits”:{“total”:8,“max\u score”:1.0,“hits”:[{“index”:“cars”;“type”:“transactions”;“id”:“AVexGB7\u99oiq3morm7l”,“score”:1.0,{“source price”:10000,“color”:“red”,“make”:“honda”;“sed”:“2014-10-28”;“transactions”;“transactions”;“index”;“transactions”;“transactions”;“id”;“transactions”;“transactions”;“交易”;“id”:“AVexGB7Ϟ99OIq3MORm7m”,“Ϟ分数:1.0”,“Ϟ分数:1.0”,“颜色:”“红色”,“制造:”“本田”,“售出:”“2014-11-05”},{“汽车指数”:“汽车”,“Ϟ类型:”“交易”,“Ϟid:”“AVexGB7Ϟ99OIq3MORm7p”,“Ϟ分数:1.0”,“Ϟ来源:{“价格:”“12000”,“颜色:”“绿色”,“制造:”“丰田”,“售出:”“2014-08-19”},“,”“交易”,“Ϟid:”AVexGB7的“价格”:15000,“颜色”:“蓝色”,“制造”:“丰田”,“售出”:“2014-07-02”},{AVexGB7的“价格”:20000,“颜色”:“红色”,“制造”:“本田”,“售出”:“2014-11-05”},{AVexGB7_99OIq3MORm7s“,“_分数”:1.0,“_来源:{“价格”:25000,“颜色”:“蓝色”,“制造”:“福特”,“售出”:“2014-02-12”}}}}}

但在这之后,它没有产生任何产出

设置:默认管道工人:8

主管道已启动

我假设这是因为json文件不是为json插件准备的,我需要做一些准备(比如使用JavaAPI),但如果可能的话,我希望避免这样做

谢谢!

正如您所注意到的,输入插件不支持聚合。可以使用输入插件定期(或每天仅一次)向Elasticsearch发送聚合查询。然后使用
Elasticsearch
输出,您可以再次将生成的聚合发送到ES

配置基本上是这样的(请注意,聚合查询需要使用URL编码并发送到ES)

input {
  http_poller {
    urls => {
      test1 => 'http://localhost:9200/cars/transactions/_search?source=%7B%22size%22%3A0%2C%22aggs%22%3A%7B%22popular_colors%22%3A%7B%22terms%22%3A%7B%22field%22%3A%22color%22%7D%7D%7D%7D'
   }
   # checking once per day
   interval => 86400
   codec => "json"
  }
}
filter {
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "my_aggs"
  }
}