# Обработка результата поиска

**URL:** https://discuss.elastic.co/t/topic/58254
**Category:** Вопросы на русском языке
**Created:** [August 17, 2016, 1:05pm UTC](https://discuss.elastic.co/t/topic/58254 "2016-08-17T13:05:56Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![ktomu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ktomu/32/3975_2.png) [@ktomu](https://discuss.elastic.co/u/ktomu)
#### Post date: [August 17, 2016, 1:05pm UTC](https://discuss.elastic.co/t/topic/58254/1 "2016-08-17T13:05:56Z")

</div>

Приветствую,  
Делаю обычный запрос (curl -XGET) к elastic с поиском определенного вхождения строки в поле messages. Запрос работает и возвращает помимо поля messages собственно еще и описание самого документа. Можно ли как-то в самом запросе (без пост обработки cut, awk… ) указать, что меня интересует только возврат информации с определенного поля?  
Например, из всего этого (я ищу строку «The text»)

"\_index": "logstash-2016.08.17",  
"\_type": "logs",  
"\_id": "AVaX\_jytcYiAf5cDVSi-",  
"\_score": null,  
"\_source": {  
"message": "The text ",  
"@version": "1",  
"@timestamp": "2016-08-17T10:13:56.479Z",  
"path": "/data/syslog/systemlog.log",  
"host": "host01"  
},

мне только выводило "message": "The text " и "@timestamp": "2016-08-17T10:13:56.479Z"

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [August 17, 2016, 1:43pm UTC](https://discuss.elastic.co/t/topic/58254/2 "2016-08-17T13:43:03Z")

</div>

Посмотрите разделы [search request - source filtering](https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-request-source-filtering.html) и [search request - fields](https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-request-fields.html). Это то, что вы ищите?

---

<div class="post-metadata">

### Author: ![ktomu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ktomu/32/3975_2.png) [@ktomu](https://discuss.elastic.co/u/ktomu)
#### Post date: [August 17, 2016, 2:29pm UTC](https://discuss.elastic.co/t/topic/58254/3 "2016-08-17T14:29:15Z")

</div>

Нет, не то. В любом случае запрос у меня возвращает имя индекса, количество хитов... в JSON формате, что и следовало ожидать. Но мне бы хотелось получать на выходе только значения в искомом поле (полях), все остальное нужно откинуть. Скорей всего нужно делать внешнюю пост обработку этого JSON и выкусывать только нужные поля.

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [August 17, 2016, 2:34pm UTC](https://discuss.elastic.co/t/topic/58254/4 "2016-08-17T14:34:05Z")

</div>

Я не очень понимаю, что вы называете "нужными полями". В не могли бы показать пример запроса и желаемого вывода?

---

<div class="post-metadata">

### Author: ![ktomu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ktomu/32/3975_2.png) [@ktomu](https://discuss.elastic.co/u/ktomu)
#### Post date: [August 18, 2016, 7:00am UTC](https://discuss.elastic.co/t/topic/58254/5 "2016-08-18T07:00:17Z")

</div>

**конечно, вот строка с запросом:**

curl -XGET '[http://localhost:9200/\_search](http://localhost:9200/_search)' -d '{"from":0,"size":2,"query":{"query\_string":{"fields":["message"],"query":""Severity=ERROR"","analyze\_wildcard":false}},"filter":{"range":{"@timestamp":{"gt":"now-1006m"}}},"sort":[{"@timestamp":{"order":"desc"}}]}'

**Вот запрос в удобной форме:**

{  
"from": 0,  
"size": 2,  
"query": {  
"query\_string": {  
"fields": [  
"message"  
],  
"query": ""Severity=ERROR"",  
"analyze\_wildcard": false  
}  
},  
"filter": {  
"range": {  
"@timestamp": {  
"gt": "now-1006m"  
}  
}  
},  
"sort": [  
{  
"@timestamp": {  
"order": "desc"  
}  
}  
]

**Получаю следующий результат:**

{  
"took": 183,  
"timed\_out": false,  
"\_shards": {  
"total": 521,  
"successful": 520,  
"failed": 1,  
"failures": [  
{  
"shard": 0,  
"index": ".kibana",  
"node": "pLSXJYh3SjWaZ7NUq4XDyw",  
"reason": {  
"type": "search\_parse\_exception",  
"reason": "No mapping found for [@timestamp] in order to sort on"  
}  
}  
]  
},  
"hits": {  
"total": 12,  
"max\_score": null,  
"hits": [  
{  
"\_index": "logstash-2016.08.17",  
"\_type": "logs",  
"\_id": "AVaayHJrcYiAf5cDvm06",  
"\_score": null,  
"\_source": {  
"message": "Aug 17 23:14:02 host - Severity=ERROR, bla bla bla bla",  
"@version": "1",  
"@timestamp": "2016-08-17T23:14:02.693Z",  
"path": "/data/syslog/systemlog.log",  
"host": "host-nagios"  
},  
"sort": [  
1471475642693  
]  
},  
{  
"\_index": "logstash-2016.08.17",  
"\_type": "logs",  
"\_id": "AVaayHJrcYiAf5cDvm0t",  
"\_score": null,  
"\_source": {  
"message": "Aug 17 23:14:02 host - Severity=ERROR, bla bla bla bla",  
"@version": "1",  
"@timestamp": "2016-08-17T23:14:02.692Z",  
"path": "/data/syslog/systemlog.log",  
"host": "host-nagios"  
},  
"sort": [  
1471475642692  
]  
}  
]  
}  
}

**Из всего этого результата мне необходимо только содержимое поля "message". Я на основании его создаю письмо и отправляю нужным адресатам.**  
**Могу ли я его отпарсить уже на уровне DSL-запроса (средствами эластика), либо это уже пост обработка (запрос curl -XGET 'query' | cut,awk ...)**?

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [August 18, 2016, 2:42pm UTC](https://discuss.elastic.co/t/topic/58254/6 "2016-08-18T14:42:09Z")

</div>

> [@ktomu](#):
>
> Могу ли я его отпарсить уже на уровне DSL-запроса (средствами эластика), либо это уже пост обработка (запрос curl -XGET 'query' | cut,awk ...) ?

Теперь понял. Нет, такой возможности в elasticsearch пока нет. Самый компактный и удобный для пост-обработки вариант, который приходит в голову это

```auto
curl -XGET 'http://localhost:9200/_search?_source_include=message&filter_path=hits.hits._source.message&format=yaml' -d '...'

```

Он произведет что-то вроде:

```auto
---
hits:
  hits:
  - _source:
      message: "Aug 17 23:14:02 host - Severity=ERROR, bla bla bla bla"
  - _source:
      message: "Aug 17 23:14:02 host - Severity=ERROR, bla bla bla bla"

```

Остальное придется обрабатывать на вашей стороне.

---

<div class="post-metadata">

### Author: ![ktomu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ktomu/32/3975_2.png) [@ktomu](https://discuss.elastic.co/u/ktomu)
#### Post date: [August 18, 2016, 5:19pm UTC](https://discuss.elastic.co/t/topic/58254/7 "2016-08-18T17:19:29Z")

</div>

Большое спасибо!

Вот еще нашел , может кому-то будет полезным

curl -XGET "query"| python -m json.tool | egrep ""message":"

этот способ разбирает JSON построчно и затем просто грепаем нужное нам поле.

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [July 6, 2017, 1:46pm UTC](https://discuss.elastic.co/t/topic/58254/8 "2017-07-06T13:46:23Z")

</div>


