#elasticsearch #logstash
#elasticsearch #logstash
Вопрос:
input{
elasticsearch{
hosts=>["localhost"]
index=>"sample_index"
query=>'{"query":{"match_all":{}}}'
scroll=>"5m"
docinfo=>true
}
}filter{
elasticsearch{
hosts=>["localhost"]
index=>"sample_index"
query=>"NOT(city:delhi)"
sort=>"code:asc"
result_size=>5
fields=>{
"code"=>"Code"
"name"=>"Name"
"city"=>"City"
"salary"=>"Salary"
}
}
}
output{
elasticsearch{
hosts=>["localhost"]
index=>"filter_sample_index4"
}
}
Именно так я и поступаю. Может кто-нибудь понять, где я делаю неправильно
Предположим, у меня есть записи { "sample_index":{ "name":"ABC", "salary":56000, "city":"mumbai" }, { "name":"XYZ", "salary":54400, "city":"DEHI" }, { "name":"QWERTY", "salary":65000, "city":"Delhi" }, { "name":"JACK", "salary":26000, "city":"mumbai" } }
Я хочу, чтобы это основывалось на отфильтровывании индекса по городу `{ «filter_index»: { «name»:»ABC», «зарплата»: 56000, «город»: «Мумбаи» },
{ «имя»: «ДЖЕК», «зарплата»: 26000, «город»: «Мумбаи» }
}`
Комментарии:
1. Не могли бы вы переформатировать свою конфигурацию, она и так не разборчива. Также, пожалуйста, объясните, что вам нужно, возможно, приведя пример. Помогите нам помочь вам!
2. @val Пожалуйста, проверьте
Ответ №1:
Поскольку query
параметр использует query_string
синтаксис запроса, вы можете просто инвертировать запрос следующим образом:
query => "NOT(city:mumbai)"
Комментарии:
1. Что не работает? Вы получаете сообщение об ошибке? Если да, то какой? Можете ли вы описать, какое поведение вы наблюдаете и чего ожидаете вместо этого?
2. он дает мне все записи
3. Что произойдет, если вы запустите это в Kibana Dev Tools
GET sample_index/_search?q=NOT(city:mumbai)
? Какие записи вы получаете?4. В kibana dev tools он работает отлично, но в параметре запроса logstash создается новый индекс, но со всеми записями
5. Итак, проблема в том, что у вас есть
query=>'{"query":{"match_all":{}}}'
на входе, поэтому все записи сбываются. Вам нужно ограничить, какие записи вы хотите присоединять к входным данным, а не к фильтру.