Запрос elasticsearch не выполняется в логстах: ожидалось двоеточие для разделения имени и значения поля - PullRequest
1 голос
/ 03 октября 2019

Я пытался использовать logstash для запроса событий эластичного поиска, чтобы я мог заполнить некоторые поля более удобочитаемыми данными. У меня есть один индекс для имен людей, который я пытаюсь использовать для улучшения других полей при индексировании других видов событий.

Я уверен, что с моей строкой запроса что-то не так, но я не знаючто. Я просто продолжаю получать это предупреждение, и тег person_query_failed :

[2019-10-03T10: 38: 52,759] [WARN] [logstash.filters.elasticsearch] Не удалось выполнить запросasticsearch для предыдущего события {: index => «logstash-people»,: error => «Неожиданный символ ('}' (код 125)): ожидал двоеточие для разделения имени поля и значения \ n в [Source: (byte»[]) \ "{\ n \" query \ ": {\ n \" query_string \ ": {\" query \ ": {\" id: 109 \ "}} \ n}, \ n \" _ source \ "": {\" cn \ "} \ n} \"; строка: 3, столбец: 42] "}

[2019-10-03T10: 38: 52,760] [WARN] [logstash.filters. эластичный поиск] Не удалось запросить эластичный поиск для предыдущего события {: index => «logstash-people»,: error => «Неожиданный символ ('}' (код 125)): ожидал двоеточие для разделения имени поля и значения \ n в[Источник: (byte []) \ "{\ n \" query \ ": {\ n \" query_string \ ": {\" query \ ": {\" id: 4 \ "}} \ n}, \n \ "_ source \": {\ "cn \"} \ n} \ "; строка: 3, столбец: 40]"}

[2019-10-03T10: 38: 52,764] [ПРЕДУПРЕЖДЕНИЕ][logstash.filters.elasticsearch] Не удалось запросить эластикипоиск предыдущего события {: index => "logstash-people",: error => "Неожиданный символ ('}' (код 125)): ожидалось, что двоеточие разделяет имя и значение поля \ n в [Source: (byte")[]) \ "{\ n \" query \ ": {\ n \" query_string \ ": {\" query \ ": {\" id: 49 \ "}} \ n}, \ n \" _ источник \": {\" cn \ "} \ n} \";строка: 3, столбец: 41] "}

Это мой шаблон запроса person_query.json :

{ 
  "query": { 
    "query_string": { "query": { "id:%{[dn_people]}" } }
  },
  "_source": { "cn" } 
}

А вот моя конфигурация фильтра logstash:

filter {
    elasticsearch {
        hosts => [ "https://localhost:9200" ]
        index => "logstash-people"
        query_template => "/path/to/person_query.json"
        fields => { "cn" => "person" }
        user => admin
        password => password
        ca_file => "/etc/elasticsearch/root-ca.pem"
        tag_on_failure => person_query_failed
    }
}

При просмотре журналов предупреждений кажется, что, по крайней мере, сама строка запроса работает должным образом: "id:% {[dn_people]}" переводится в \ "id: 109 \" , \ "id: 4 \" и \ "id: 125 \" соответственно.

При написании моегозапрос, я смотрю на это: https://discuss.elastic.co/t/how-to-query-elasticsearch-and-take-some-fields-from-old-data/75300/3

Может ли кто-нибудь помочь и подтолкнуть меня в правильном направлении, чтобы исправить это?

Я использую Opendistro для Elasticsearch.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Благодаря ответу apt-get_install_skill я смог продвинуться вперед со своей проблемой. Их было несколько, которые я мог бы легко разрешить с помощью интенсивного поиска в Google.

Наконец, при использовании этого шаблона запроса

 { 
   "query": {
     "query_string": { "query": { "id": %{[dn_people]} } } 
   },
   "_source": [ "cn" ] 
}

появилось это предупреждение:

[2019-10-03T12: 50: 20,563] [WARN] [logstash.filters.elasticsearch] Не удалось запроситьasticsearch для предыдущего события {: index => "logstash-people",: error => "[400] {\" error\ ": {\" root_cause \ ": [{\" type \ ": \" parsing_exception \ ", \" reason \ ": \" [query_string] неизвестный токен [START_OBJECT] после строки [query] \ ", \"\ ": 1, \" col \ ": 35}], \" type \ ": \" parsing_exception \ ", \" reason \ ": \" [query_string] неизвестный токен [START_OBJECT] после [query] \ ",\ "line \": 1, \ "col \": 35}, \ "status \": 400} "}

Я нашел эту тему Неизвестная ошибка токена для эластичного поискового запроса, который не дал прямого ответа на мою ситуацию, но, к счастью, baudsp уже дал правильный ответ в качестве комментария.

Итак, вот правильный шаблон запроса согласно комментарию отбод:

{ 
  "query": {
    "query_string": { "query": "id:%{[dn_people]}" }
  },
  "_source": [ "cn" ]
}
1 голос
/ 03 октября 2019

На мой взгляд, проблема заключается здесь

Неожиданный символ ('}' (код 125)): ожидал двоеточие для разделения имени поля и значения \ n в[Источник: (byte []) \ "{\ n \" query \ ": {\ n \" query_string \ ": {\" query \ ": {\" id: 49 \ "}} \ n}, \n \ "_ source \": {\ "cn \"} \ n} \ ";строка: 3, столбец: 41] "}

Ваш шаблон запроса должен выглядеть следующим образом:

{
  "query": { 
    "query_string": { "query": { "id": %{[dn_people]} } }
  },
  "_source": { "cn" } 
}

Разница в том, что вам нужно отделить поле от значениязаключив в кавычки полное имя поля, затем двоеточие и затем значение.

Вы можете определить проблему, посмотрев на решенный запрос:

\ "id: 109 \"

Без escape-символов это выглядит так:

"id: 109"

Elasticsearch интерпретирует всю строку как имя поля и можетне найти следующие двоеточие и значение.

Должно быть разрешено:

\ "id \": 109 или нет выхода: "id": 109

...