Я тут ковыряя тредовый режим для dynamic'а понял, что проще добавить фичу в бэкенд,
чем разгребать свой говнокод на JS.
Так вот суть: в индексе каждому сообщению присваивается topicid в формате UUID(RFC 4122).
Зная topicid мы можем выбрать целиком тред с нужной нам сортировкой.
Чтобы вытащить тред по интересующему сообщению(мы знаем msgid) нам нужно будет сделать 2 запроса:
* Первый - узнаем topicid из сообщения
* Второй - вытягиваем ветку
Здесь и далее запросы в json отправляются методом POST на https://dynamic.lessmore.pw/search2.
Узнаем topicid
{ "sort": [ { "date": { "order": "desc" } }, { "_score": { "order": "desc" } } ], "query": { "query_string": { "fields": [ "msgid" ], "query": "apfIchd9i8HMMc5DKJNI" } }, "size": 1 }
В ответ нам вернется документ сообщения
{ "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": null, "hits": [ { "_index": "idec5", "_type": "post", "_id": "apfIchd9i8HMMc5DKJNI", "_score": 9.252761, "_source": { ... "topicid": "fcb208f7-c947-42bc-a037-73d63b137913" }, "sort": [ 1514976123000, 9.252761 ] } ] } }
Теперь зная topicid можно вытянуть весь тред с сортировкой от старых к новым(или наоборот).
Модифицируем первый запрос
{ "sort": [ { "date": { "order": "asc" } }, { "_score": { "order": "asc" } } ], "query": { "query_string": { "fields": [ "topicid" ], "query": "fcb208f7-c947-42bc-a037-73d63b137913" } }, "size": 100 }
Ответом будет список с документами ветки отсортированный по дате от старых сообщений к новым.
Новый поиск будет доступен тут https://dynamic.lessmore.pw/search2 в ближайшее время, и нидекс будет наполняться совсем неторопливо.
После полного реиндекса поиск будет объявлен стабильным и доступен по https://dynamic.lessmore.pw/search.
Так же фетчер, маппинг, веб будут документированы и снабжаться инструкцией по развертке.
// Народ, а каких бы еще фич хотелось бы вам?