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"
}
}