Общие замечания по выдаче:
- Запрос поддерживает пагинацию. На одной странице выдается по 30 результатов, максимально возможное общее количество результатов равно 1000.
- Результаты фильтруются с учетом того, к каким форумам у пользователя есть доступ.
- В ответе сервера есть поле 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 # степень релевантности (влияет на порядковый номер в выдаче - чем больше, тем выше)
},
...
]