Поиск ElasticSearch с perl клиентом - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь сделать что-то, что должно быть простым, но я не могу заставить его работать. Я посмотрел и обыскал все, чтобы найти подробную информацию о c search :: elsticsearch. Я могу только найти CPAN do c, и что касается поиска, он едва упоминается. Я ищу здесь и не могу найти повторяющийся вопрос.

У меня есть эластичный поиск и бит файла. Filebeat отправляет системный журнал вasticsearch. Я просто хочу искать сообщения с соответствующим текстом и диапазоном дат. Я могу найти сообщения, но когда я пытаюсь добавить диапазон дат, запрос не выполняется. Вот запрос от kibana dev tools.

GET _search
{
  "query": { 
    "bool": { 
      "filter": [ 
        { "term": { "message": "metrics" }},
        { "range": { "timestamp": { "gte": "now-15m" }}}
      ]
    }
  }
}

Я не получаю именно то, что ищу, но ошибки нет.

Вот моя попытка с perl

    my $results=$e->search(
        body => {
                query => {
                        bool => {
                         filter => {
                                        term => { message => 'metrics' },
                                        range => { timestamp => { 'gte' => 'now-15m' }}
                         }

                        }
                }
        }
);

Это ошибка.

[Request] ** [http://x.x.x.x:9200]-[400] 
[parsing_exception] 
[range] malformed query, expected [END_OBJECT] but found [FIELD_NAME], 
with: {"col":69,"line":1}, called from sub Search::Elasticsearch::Role::Client::Direct::__ANON__ 
at ./elasticsearchTest.pl line 15. 
With vars: {'body' => {'status' => 400,'error' => {
'root_cause' => [{'col' => 69,'reason' => '[range] 
malformed query, expected [END_OBJECT] but found [FIELD_NAME]',
'type' => 'parsing_exception','line' => 1}],'col' => 69,
'reason' => '[range] malformed query, expected [END_OBJECT] but found [FIELD_NAME]',
'type' => 'parsing_exception','line' => 1}},'request' => {'serialize' => 'std',
'path' => '/_search','ignore' => [],'mime_type' => 'application/json',
'body' => {
'query' => {
'bool' => 
{'filter' => {'range' => {'timestamp' => {'gte' => 'now-15m'}},
'term' => {'message' => 'metrics'}}}}},
'qs' => {},'method' => 'GET'},'status_code' => 400}

Может кто-нибудь помочь мне разобраться, как искать с помощью модуля search ::asticsearch perl?

1 Ответ

2 голосов
/ 06 февраля 2020

Несколько предложений фильтра должны передаваться как отдельные объекты JSON в массиве (как в вашем исходном запросе JSON), а не как несколько фильтров в одном объекте JSON. Это соответствует тому, как вы должны создать структуру данных Perl.

filter => [
  {term => { message => 'metrics' }},
  {range => { timestamp => { 'gte' => 'now-15m' }}}
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...