Skip to content

Latest commit

 

History

History
120 lines (111 loc) · 6.92 KB

File metadata and controls

120 lines (111 loc) · 6.92 KB

Поиск по форуму

Общие замечания по выдаче:

  1. Запрос поддерживает пагинацию. На одной странице выдается по 30 результатов, максимально возможное общее количество результатов равно 1000.
  2. Результаты фильтруются с учетом того, к каким форумам у пользователя есть доступ.
  3. В ответе сервера есть поле attrs, содержащее список полей в выдаче matches. Каждое поле обозначено именем и целочисленным типом. Например, "1" - Int, "7" - String.

Общая структура ответа

{
    attrs: {              # список полей в выдаче
        {attr}: Int,
        ...
    },
    error: String,        # текст ошибки, если есть
    fields: [             # список полей, по которым осуществляется поиск
        ...: String,
        ...
    ],
    matches: [            # список найденных результатов
        {
            ...
        },
        ...
    ],
    time: Float,          # длительность поиска в секундах
    total: Int,           # общее количество результатов
    total_found: Int,     # общее количество найденных результатов (но получить можно максимум total)
    type: String,         # категория поиска
    warning: String,      # предупреждение, если есть
    words: {
        {word}: {
            docs: Int,    # количество найденных совпадений по данному слову
            hits: Int     # количество найденных уникальных совпадений по данному слову
        },
        ...
    }
}

Поиск по форуму

Запрос

GET /search-forum.json?q={query}&forums={forums}&topics={topics}&t={type}&alg={algorithm}&period={period}&sortby={sort}&page={page}&onlymatches={0|1}

Параметры

query - строка поиска. В качестве разделителя используется "+"
forums - в каких форумах искать (необязательный; по-умолчанию во всех). Несколько форумов передаются отдельными параметрами: чтобы искать одновременно в форумах "Кино" и "Музыка", надо передать в запросе их id: ...&forums=5&forums=8&...
topics - в каких темах искать (необязательный; по-умолчанию во всех). Схема та же, что и для forums
type - где искать (необязательный; по-умолчанию t)
    * t - только в названиях тем
    * m - в сообщениях
algorithm - как искать (необязательный; по-умолчанию 0)
    * 0 - поиск по словам запроса
    * 1 - поиск фразы целиком (как есть)
period - за какой период (необязательный; по-умолчанию 0)
    * 0 - за все время
    * любое N > 0 - за последние N суток (предусмотренные значения - 1, 7, 31, 180, 365)
sort - сортировка (необязательный; по-умолчанию rel)
    * rel - по релевантности
    * dat - по актуальности
page - номер страницы (необязательный; по-умолчанию 1)
onlymatches - выдавать только содержимое массива matches (необязательный; по-умолчанию 0)

Пример

/search-forum.json?q=фантастика&forums=14&t=t&onlymatches=1 - поиск тем со словом "фантастика" в названии в форуме "Произведения, авторы, жанры" за все время

Ответ (при запросе с параметром onlymatches=1)

[
    {
        add_time: Long,          # дата создания темы (UNIX-таймштамп)
        doc: Int,                # ?
        forum_id: Int,           # id форума
        forum_name: String,      # название форума
        is_closed: Boolean,      # тема закрыта
        is_pinned: Boolean,      # тема закреплена
        message_count: Int,      # количество сообщений
        name: String,            # название темы
        topic_id: Int,           # id темы
        user_id: Int,            # id топикстартера
        user_name: String,       # логин топикстартера
        view_count: Int,         # количество просмотров
        weight: Int              # степень релевантности (влияет на порядковый номер в выдаче - чем больше, тем выше)
    },
    ...
]

Пример

/search-forum.json?q=фантастика&t=m&onlymatches=1 - поиск сообщений со словом "фантастика" в тексте по всем форумам за все время

Ответ (при запросе с параметром onlymatches=1)

[
    {
        date_of_add: Long,         # дата отправки сообщения (UNIX-таймштамп)
        doc: Int,                  # ?
        forum_id: Int,             # id форума
        forum_name: String,        # название форума
        is_censored: Boolean,      # сообщение зацензурено
        message_id: Int,           # id сообщения
        message_text: String,      # текст сообщения
        topic_closed: Boolean,     # тема закрыта
        topic_id: Int,             # id темы
        topic_message_count: Int,  # количество сообщений в теме
        topic_message_index: Int,  # номер сообщения в теме
        topic_name: String,        # название темы
        topic_pinned: Boolean,     # тема закреплена
        user_id: Int,              # id автора сообщения
        user_name: String,         # логин автора сообщения
        weight: Int                # степень релевантности (влияет на порядковый номер в выдаче - чем больше, тем выше)
    },
    ...
]