Skip to content

query language

github-actions[bot] edited this page Oct 14, 2026 · 1 revision

Язык поисковых запросов

Если вы работаете с max через ИИ-агента, учить этот язык не нужно: скажите обычными словами, что ищете, и запрос составит агент. Эта страница — для тех, кто набирает поиск сам, и для тех, кому нужен каждый фильтр: точные операторы, все поля, preset, правила дат и пределы.

Это справка по запросам max personal search messages, max personal search mail, max personal search all, max personal stats messages show, сохранённых поисков и --filter поиска по темам. Примеры на каждый день — в поиске сообщений.

Термины этой страницы:

  • Запрос — текст, который вы ищете, например счёт from:me date:7d.
  • Поле — имя с двоеточием, которое относит часть запроса к одному свойству сообщения: from: (отправитель) или date: (когда отправлено). Слова без поля ищутся в тексте сообщения.
  • Оператор — слово или знак, который соединяет условия: AND, OR, NOT.
  • Формы слова — одно слово с разными окончаниями: «квартира» и «квартиру».

Язык — строгий профиль синтаксиса Apache Lucene: слова, фразы, AND/OR/NOT, группы, поля, диапазоны, ограниченные шаблоны и регулярные выражения. «Строгий» значит, что всё неподдерживаемое — ошибка, а не молча пропущенная часть. Полная справка содержит генерируемые таблицы полей, операторов, preset и пределов и проверяемые примеры; техническая спецификация описывает грамматику и компилятор.

Для почты chat: и --chat выбирают цепочку по id или теме письма, а from: — отправителя. У почты нет полей kind: и topic:.

Что умеет язык

Нужно Пишите
сообщения со всеми этими словами, в любой форме счёт оплачен
эти слова подряд, в этом порядке "счёт оплачен"
одно слово или другое, без третьего (кафе OR библиотека) NOT шумно
только эта форма слова exact:квартира, или --exact для всех слов без поля
слова, которые начинаются на что-то квартир*
отправитель, чат, вид чата from:me, chat:"Книжный клуб", kind:private
период date:7d, date:[2026-01-01 TO 2026-02-01}
файлы по имени или размеру filename:*.pdf, size>10MB
текст, похожий на пароль, карту или телефон preset:secret, preset:card
ваши собственные метки tag:work
шаблон text:/pass(port)?/

Слова и фразы без поля ищут формы слов. --exact выбирает точные формы для слов без поля; явное text: продолжает искать формы. Какие формы совпадают, решают настройки языка архива (формы слов).

Операторы

Оператор Пример Значение
слова счёт оплачен оба слова
фраза "счёт оплачен" слова в этом порядке
AND, && alpha AND beta оба
OR, || alpha OR beta любое
NOT, !, - alpha NOT beta первое без второго
+ +alpha OR beta alpha обязательно, beta — нет
группа (alpha OR beta) gamma скобки задают порядок
группа поля from:(alice OR bob) поле относится к каждому значению
диапазон date:[2026-01-01 TO 2026-02-01} [ ] включают, { } исключают, * — без границы
сравнение size>10MB, date>=7d, date:>=7d открытый диапазон; запись с двоеточием — то же самое
шаблон квартир*, т?кст * — любые символы, ? — один
regex text:/pass(port)?/ ограниченное регулярное выражение Lucene

alpha OR beta gamma означает (alpha OR beta) AND gamma; alpha OR beta AND gamma — alpha OR (beta AND gamma). Для ясности ставьте скобки. and, or, not строчными — обычные слова. Запрос из одного NOT ничего не находит: добавьте положительное условие, например kind:group NOT preset:secret. Нечёткий поиск ~, близость слов, веса и интервалы дают ошибку, а не пропускаются. Опечатки не исправляются: чтобы поймать разные окончания, пишите шаблон вроде квартир*.

Поля

Поле Что находит Пример
text слова сообщения (поле по умолчанию) text:счёт
exact точная форма слова или фразы exact:квартира, exact:"счёт оплачен"
body весь исходный текст, с учётом регистра body:/.*счёт.*/
from отправителя: по имени, @username или id; me — вы from:"Алиса Тестова"
chat чат: по названию, @username или id chat:"Книжный клуб"
date когда отправлено date:today, date:7d, date:[2026-01-01 TO 2026-02-01}
kind вид чата: private, group, channel, saved, bot, service, unknown kind:private
has attachment, link, file, photo, image, video, audio, voice, sticker, contact, location, poll has:file
topic одну ветку обсуждения; нужен один чат chat:"Книжный клуб" AND topic:42
in какие аккаунты: провайдер или bots in:bots
preset текст, похожий на секрет или контакт preset:secret
content сохранённый текст вложения content:договор
filename имя вложенного файла целиком filename:*.pdf
mime тип вложенного файла; MAX его не сообщает mime:image
size размер вложенного файла: байты или KB/MB/GB по 1024 size>10MB
tag ваша локальная метка на сообщении, его чате или отправителе tag:work

Имена полей различают регистр. Неизвестное поле, значение или сочетание — ошибка, а не пустой ответ и не обычный текст. Имя, которого нет в архиве, у MAX не спрашивается.

kind:bot выбирает чат с ботом, in:bots — архивы ботов max sales bot. topic: требует ровно одного чата в chat: или --chat: номера веток повторяются в разных чатах. filename, mime и size подходят сообщению, если подходит хотя бы один его файл. MAX не сообщает тип файла, поэтому mime: здесь ничего не находит — ищите по расширению.

Preset

Preset находит текст по его виду. С ним можно найти пароль, код или номер карты, который кто-то прислал.

Preset Кандидат — это
password подпись пароля и значение после неё
code подпись кода подтверждения и 4–8 цифр
api-key подпись ключа API и значение
secret подпись пароля, секрета, токена или ключа API и значение
card 13–19 цифр, можно с пробелами или дефисами
bank значение вида IBAN
passport подписанный номер паспорта или российский вид 4+6 цифр
phone международный телефон с плюсом
email адрес электронной почты
telegram-link ссылка t.me или telegram.me
url ссылка HTTP(S)
contact вложение-контакт, email или телефон
location вложение-место или ссылка geo:

Preset сообщает кандидата по виду. Он не проверяет пароль, карту или документ и может совпасть с безобидным текстом. Не удаляйте и не пересылайте сообщения автоматически по его ответу.

Даты

--timezone принимает пояс IANA, например Europe/Madrid; без него берётся пояс компьютера, и ответ его называет. Дата без времени — весь календарный день. Включающая верхняя граница включает день целиком, исключающая — исключает; день перехода на летнее время длится 23 или 25 часов.

date:today и date:yesterday — календарные дни. date:7d — от 7 дней назад до сейчас (также 30m, 2h); date>=7d и date:[30d TO 7d} работают в сравнении и диапазоне, отсчёт — от момента запроса. Точное время пишите в кавычках, с секундами и смещением: date>="2026-01-01T10:00:00+02:00".

Слова, шаблоны и регулярные выражения

Перед индексом и поиском текст приводится к нижнему регистру и теряет ударения; ё становится е, й — и. Поэтому некоторые разные слова совпадают: мой находит и «мои». Regex и шаблоны по text: приводятся так же.

text:/счёт/ совпадает с целым словом «счёт», но не со «счётом». body:/счёт/ совпадает только с сообщением, весь текст которого — «счёт», с учётом регистра; чтобы найти где угодно, пишите body:/.*счёт.*/, а для начала предложения — body:/.*[Сс]чёт.*/. Это синтаксис регулярных выражений Lucene, без lookaround, обратных ссылок, якорей и флагов JavaScript.

На большом архиве короткий шаблон вроде к* раскрывается больше чем в 10 000 слов и отвергается — удлините его. Длинные запросы, глубокая вложенность, большие шаблоны и медленный перебор отвергаются ошибкой query_limit, а не обрезаются: сузьте чат, даты или шаблон.

Регулярное выражение JavaScript: --regex

max personal search messages --regex 'invoice\s+\d+' --json

--regex — отдельный режим. Слова после команды — одно регулярное выражение JavaScript, а не запрос на этом языке. Оно не учитывает регистр, проверяется на полном тексте каждого сохранённого сообщения и выполняется в изолированном процессе с пределами времени и размера. Сохранённый поиск хранит свой --regex; добавить --regex при запуске с --saved нельзя.

Ответ

--json возвращает { items, page, limit, hasMore, corrections, completeness, wordsReady, query, coverage }, даже без совпадений. --jsonl выдаёт только сообщения, построчно.

  • query — версия языка, часовой пояс и порядок.
  • coverage — какие аккаунты и чаты просмотрены. lastSyncedAt — самое старое время, когда чат из охвата скачивал messages sync; null, если хотя бы один не скачивался ни разу. inventoryComplete значит, что каждый аккаунт охвата хотя бы раз передал полный список чатов; полноту истории это не обещает.
  • completeness — по каждому чату: доходит ли сохранённая история до начала и есть ли пропуски.
  • wordsReady — достроен ли индекс слов. При false запрос со словами даёт index_not_ready и команду, которая его достроит, max personal store migrate; запрос без слов работает.
  • hasMore говорит о странице, а не о том, есть ли в MAX ещё.

Ошибка указывает место в запросе и подсказку.

Через MCP

Когда агент ищет через MCP-сервер max, max_read (command: "search messages") принимает запрос как text или как синтаксическое дерево с версией в ast (не оба сразу), а timezone — календарный пояс. chat принимает id или сохранённое название; source, newest, context и limit работают как опции команды; saved запускает сохранённый поиск. thread, thread_hops, thread_messages, thread_bytes, thread_within и sync_first соответствуют опциям --thread… и --sync-first; sync_first доступен только при messages.sync-first: allow. Ответ содержит те же поля, что --json. max_read (command: "stats messages show") считает по тем же запросам. record: false не записывает вызов в историю запросов.

Дальше

Clone this wiki locally