Skip to content

query language

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

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

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

Это справка по запросам max personal search messages, 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 и пределов и проверяемые примеры; техническая спецификация описывает грамматику и компилятор.

Почту max не ищет: это memo search mail.

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

Нужно Пишите
сообщения со всеми этими словами, в любой форме счёт оплачен
эти слова подряд, в этом порядке "счёт оплачен"
одно слово или другое, без третьего (кафе 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
phone телефон, найденный в тексте, как бы он ни был записан phone:"+34 600 000 000"
email адрес почты, найденный в тексте email:"ana@example.com"
url ссылка, найденная в тексте, без параметров слежения url:"https://example.com/a"
domain сайт ссылки или адреса, найденных в тексте domain:example.com
mentions человек, организация или документ, к которому привязано найденное упоминание mentions:"person:12"

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

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

Упоминания

max находит в сохранённых сообщениях телефоны, адреса почты, ссылки, документы и имена людей. Эти поля находят сообщения, в которых они есть. Сами находки показывает max personal mentions list.

max personal search messages 'phone:"+34 600 000 000"'
max personal search messages 'email:"ana@example.com" OR domain:example.com'
max personal search messages 'mentions:"person:12"'

Значение с + или @ берите в кавычки: оба знака — операторы. Телефон находится, как бы он ни был записан: +34 600 000 000 и 600000000 — один телефон, а номер без + читается по странам из настройки phone_countries. domain: считает docs.example.com сайтом example.com. В mentions: пишут ссылку на человека, организацию или документ; поле находит сообщения, чьи упоминания вы привязали к нему через max mentions confirm.

max personal mentions list --new показывает нерешённое с прошлого --new, max personal mentions domains — сайты, на которые ведут ссылки, самые частые сверху. confirm и reject с --all-in-chat решают имя сразу во всём чате.

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, а не обрезаются: сузьте чат, даты или шаблон.

Ответ

--json возвращает { items, page, next, missing, meta }, даже без совпадений. --jsonl выдаёт только сообщения, построчно.

  • missing — чего поиск не видел и почему: запись coverage, если часть чатов не скачана или отстала, text, пока индекс слов достраивается, pictures, если модель картинок не скачана.
  • next — команды, которые это исправят (messages.sync, store.migrate, models.download-image), и page.next — следующая страница с тем же запросом.
  • meta.accounts — какие аккаунты просмотрены.
  • page.has_more говорит о странице, а не о том, есть ли в MAX ещё.

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

Через MCP

Когда агент ищет через MCP-сервер max, max_read (command: "search messages") принимает запрос текстом в query, а timezone — календарный пояс. chat: пишется в самом запросе; 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