Сообщения в TopicID на dynamic: вытаскиваем тред целиком

TopicID на dynamic: вытаскиваем тред целиком

Я тут ковыряя тредовый режим для 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.
Так же фетчер, маппинг, веб будут документированы и снабжаться инструкцией по развертке.

// Народ, а каких бы еще фич хотелось бы вам?
Difrex(mobile) to All (2018-01-05 08:02:22) [ссылка]

Re: TopicID на dynamic: вытаскиваем тред целиком

Ответ на сообщение
> // Народ, а каких бы еще фич хотелось бы вам?
1. Хотелось бы добавить в FAQ описание, как пользоваться тредами и навигацией туда-сюда-обратно по msgid, сабжам, поинтам

2. Нужен парсинг цитат, комментариев и прочей разметки. И выделение цветом. А то читать просто так крайне неудобно

3. API для экспорта текущей ленты в формат RSS.

4. При доступе через клиент, когда скачиваешь сообщение, отсутствует тег ii/ok. Это баг
vit01 to Difrex(mobile) (2018-01-05 08:53:12) [ссылка]

Re: TopicID на dynamic: вытаскиваем тред целиком

Ответ на сообщение
>> // Народ, а каких бы еще фич хотелось бы вам?
>1. Хотелось бы добавить в FAQ описание, как пользоваться тредами и навигацией туда-сюда-обратно по msgid, сабжам, поинтам
Будет отдельная от фака дока.
>2. Нужен парсинг цитат, комментариев и прочей разметки. И выделение цветом. А то читать просто так крайне неудобно
Есть в TODO.
>3. API для экспорта текущей ленты в формат RSS.
Интересное предложение, посмотрю, что можно придумать
>4. При доступе через клиент, когда скачиваешь сообщение, отсутствует тег ii/ok. Это баг
Я удивлен, что оно вообще работает =)

Да, кстати, я был бы очень признателен, если бы хотелки и баги формировались, как таск.

* По вебу тут https://gitea.difrex.ru/lapus/dynamic/issues
* По ноде тут https://gitea.difrex.ru/Umbrella/lessmore
* По индексу тут https://gitea.difrex.ru/Umbrella/fetcher

Если удобней на гитхабе, то могу синкать актуальные изменения и туда :)
Difrex(mobile) to vit01 (2018-01-05 09:08:36) [ссылка]

Re: TopicID на dynamic: вытаскиваем тред целиком

Ответ на сообщение
Так, я начинаю индексирование всего. Теперь у почти каждого сообщения должен появиться topicid.
Те сообщения, для которых по каким-то причинам не найдено старового сообщения, получают тег "misplaced": "yes".
Difrex(mobile) to Difrex(mobile) (2018-01-08 11:43:30) [ссылка]