Любой поисковый запрос состоит из фраз, функций и спецсимволов, разделенных пробельными символами.
Пробельные символы определены Unicode-категориями Ps, Pe, Pi, Pf, Po — пунктуация (за исключением дефисных и соединительных символов в сложных словах), и категориями Zs, Zl, Zp — разделительные символы. При этом, пробельный символ не может быть одним из спецсимволов: (
и )
, "
и '
, :
.
Пример: запрос Мне как-то всё равно, как я выгляжу в ваших глазах.
будет разбит на части: Мне
, как-то
, всё
, равно
, как
, я
, выгляжу
, в
, ваших
, глазах
; а запрос яблоко OR помидор sort:time
— на яблоко
, OR
, помидор
, sort:time
.
После разбиения запрос трактуется как древовидное математическое выражение, элементами которого являются фразы и функции, а действиями (операторами) — ключевые слова NOT
, OR
, AND
, THEN
, а также пробел — неявное и. В качестве элемента может выступать и подвыражение, заключенное в круглые скобки.
Порядок выполнения действий (от самого сильного оператора к самому слабому): OR
, AND
, THEN
, неявное и.
Пример: запрос куплю машину OR мопед
эквивалентен запросу куплю (машину OR мопед)
.
NOT
- логическое отрицание. Запрос видаNOT a
выдаст результаты, не соответствующие запросуa
.OR
— логическое ИЛИ. Запрос видаa OR b
выдаст результаты объединения отдельных запросовa
иb
.AND
— логическое И. Запрос видаa AND b
выдаст результаты пересечения отдельных запросовa
иb
.THEN
— оператор последовательности слов. Запрос видаa THEN b
выдаст те же результаты, что иa AND b
, однако релевантность сообщений в ответе будет высчитываться исходя из близостиa
иb
в сообщении и их порядка. Операнды могут включать только фразы и их комбинации, но не могут содержать функции!- Неявное и. Эквивалентно оператору
AND
, но имеет меньший приоритет.
Фразы могут быть как отдельными словами (например яблоко
), так и сочетаниями слов, заключенных в двойные или одинарные кавычки (например "люблю яблоки"
) Кавычки внутри фраз можно экранировать обратной косой чертой (например "он сказал \"поехали\" и махнул рукой"
) .
Фразы, представленные одиночными словами, которые присутствуют в списке стоп-слов удаляются из запроса, в отличие стоп-слов, которые являются частью многосложных фраз в кавычках.
Фразы в кавычках особенно полезны при поиске точных предложений, т. к. семантически запрос "a b"
эквивалентен запросу a THEN b
(если a
и b
не являются стоп-словами), а запрос a b
— запросу a AND b
, который не учитывает порядок слов в сообщении.
Функции записываются в виде название:аргумент
. Аргумент обязательно должен присутствовать, и может представлять собой либо одно слово, либо строку в кавычках.
Многие функции существуют в двух вариантах — $func
и i$func
, где последний — регистронезависимый.
regex:X
иiregex:X
— регулярные выражения, определенные стандартом POSIX 1003.2. Дабы избежать ошибок рекомендуется всегда использовать кавычки!contains:X
иicontains:X
— отбирают сообщения, которые содержат подстрокуX
.like:X
иilike:X
— выражения LIKE и ILIKE из стандарта SQL.similarto:X
— регулярные выражения SIMILAR TO из стандарта SQL.author:X
— отбирает сообщения, написанные пользователем с никомX
или с ником, который закреплен заX
как псевдоним.rawauthor:X
— отбирает сообщения, написанные пользователем с никомX
, точь-в-точь.sort:time
иsort:relevance
— выбор режима сортировки, по времени или по релевантности (по умолчанию).order:asc
иorder:desc
— выбор порядка сортировки, по убыванию или по возрастанию (по умолчанию).date:"[OP]<date>"
— дата отправки сообщения.OP
может быть одним из=
(по умолчанию),!=
,<
,>
,<=
,>=
.date
имеет форматyyyy-mm-dd
.time:"[OP]<time>"
— время отправки сообщения.time
имеет форматhh:mm:ss
.datetime:"[OP]<datetime>"
— дата и время отправки сообщения.datetime
имеет форматyyyy-mm-dd hh:mm:ss
.length:"[OP]<length>"
— длина сообщения.OP
работает так же, как в функцииdate
и ей подобных.
Команды ^search
, ^top
, ^count
принимают на вход поисковый запрос, как описано в п. 1.
<LeshaInc> :search заходите в ирку
<hubblest> https://da.gd/I3hO Totoro │ если в ирку не охото заходить - не заходи
<hubblest> https://da.gd/r6bV Asior │ пару раз в ирку заходил
<hubblest> https://da.gd/lTzm Fiender │ пусть в ирку заходит
<hubblest> ... https://clbin.com/Vhs7J
<LeshaInc> :top блин
<hubblest> 1. 1987 bpm140 │ Total users:
<hubblest> 2. 1076 LeshaInc │ 143
<hubblest> 3. 712 fingercomp │ Total users (w/o aliases):
<hubblest> 4. 502 Totoro │ 145
<hubblest> 5. 277 jvekstrem-extrem │ Total messages:
<hubblest> 6. 219 BrightYC │ 5857
Total users
— количество пользователей, которых затронул поисковый запрос.
Total users (w/o aliases)
— количество ников, которых затронул поисковый запрос — больше или равен первому числу.
Total messages
— суммарное количество сообщений, удовлетворяющих запрос.
<LeshaInc> ^count блин
<hubblest> Messages: 5857, Users: 143, Users (w/o aliases): 145
Числа соответствуют выдаче команды ^top
, но без списка пользователей и в одну строку.
<LeshaInc> ^import-logs
<hubblest> Logs imported in 869.96127ms (217 new lines)
Если база данных пуста, первым аргументом следует указать день первого сообщения:
<LeshaInc> ^import-logs 2016-11-21
<hubblest> Logs imported in 770.261784292s (2493285 new lines)
(на состояние 2020-01-04, может измениться)
и, в, во, не, что, он, на, я, с, со, как, а, то, все, она, так, его, но, да, ты, к, у, же, вы, за, бы, по, только, ее, мне, было, вот, от, меня, еще, нет, о, из, ему, теперь, когда, даже, ну, вдруг, ли, если, уже, или, ни, быть, был, него, до, вас, нибудь, опять, уж, вам, ведь, там, потом, себя, ничего, ей, может, они, тут, где, есть, надо, ней, для, мы, тебя, их, чем, была, сам, чтоб, без, будто, чего, раз, тоже, себе, под, будет, ж, тогда, кто, этот, того, потому, этого, какой, совсем, ним, здесь, этом, один, почти, мой, тем, чтобы, нее, сейчас, были, куда, зачем, всех, никогда, можно, при, наконец, два, об, другой, хоть, после, над, больше, тот, через, эти, нас, про, всего, них, какая, много, разве, три, эту, моя, впрочем, хорошо, свою, этой, перед, иногда, лучше, чуть, том, нельзя, такой, им, более, всегда, конечно, всю, между