Как это ваще устроено??? На самом деле API - это открытый всем Elasticsearch, который предоставляет гору возможностей для поиска за счет движка Lucene. Давайте что-нибудь найдем!
Вот в этом вот комменте я пообещал рассказать как это все сделать. Приступим.
Давайте для начала попробуем поискать этот самый коммент:
ii://XWShDDcuR4C8PcrTFdGl. Здесь и далее мы будем использовать только curl.
curl -XPOST -d '{"query": {"query_string" : {"fields" : ["msgid"], "query" :"XWShDDcuR4C8PcrTFdGl"}}}'
https://dynamic.lessmore.pw/search
Нам вернется такой вот ответ
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 8.316952,
"hits": [
{
"_index": "idec_net",
"_type": "post",
"_id": "XWShDDcuR4C8PcrTFdGl",
"_score": 8.316952,
"_source": {
"echo": "idec.talks",
"subg": "Re: Совет нодов",
"to": "Peter",
"author": "Difrex(mobile)",
"message": "\nПостараюсь завтра написать пост с обзором в
ii://develop.16. Ну, и ссылку в этот тред скину.",
"date": "1513020107",
"msgid": "XWShDDcuR4C8PcrTFdGl",
"tags": "",
"repto": "h97Frgqdtapl4AI11aUj",
"address": "tavern,23"
}
}
]
}
}
Вот и он!
Нам вернулось одно сообщение, что не удивительно, т.к. ID в сети уникальны, а мы искали именно по нему.
А теперь давайте выведем все последние(5) сообщения(по дате) из эхи idec.talks:
curl -XPOST -d '{"sort": [{"date": {"order": "desc"}}, {"_score": {"order": "desc" }}], "size": 5}'
https://dynamic.lessmore.pw/search -H 'Content-type: application/json'
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
}
...
Смотрите, тут мы отсортировали(на стороне сервера) сообщения по дате в порядке убывания и ограничили лимит в 5 сообщений. Попробуйте перевести это на SQL(`select * from idec.talks order by date desc limit 5`).
А теперь выполним более сложный поиск: мы найдем сообщения по строке! Т.е. выполним полнотекстовый поиск!
Запрос будет выглядеть так:
{
"sort": [
{
"date": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"query": {
"simple_query_string": {
"query": "обзор"
}
},
"size": 5
}
Отправляем его POST-ом в
https://dynamic.lessmore.pw/search.
В ответ нам на это вернется список из 5 сообщений отсортированных по дате, где найдены вхождения слова "обзор". Кстати, верхнее сообщение(b2rhH6sOfzEzgGZzLT51(на данный момент)) из эхи habra.16 и с заголовком "Обзор литературы по языку Python для начинающих".
Вот так вот. Чтобы делать более лучшие вещи читайте документацию(query DSL) по Elasticsearch.
Ссылка:
https://difrex.lessmore.pw/post/api-poiska-na-dynamic/