Полнотекстовый поиск в Почте
Mail.Ru
Дмитрий Калугин-Балашов
Общая схема
Поисковый
демон
Перлячка

Почтовый
демон

Браузер
Токенизация

d.kalugin-balashov@corp.mail.ru
Токенизация

d.kalugin-balashov@corp.mail.ru
Токенизация

d.kalugin-balashov@corp.mail.ru
Токенизация

d.kalugin-balashov@corp.mail.ru
Токенизация

d.kalugin-balashov@corp.mail.ru
Токенизация
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru d.kalugin-balashov@corp.mail.ru
d.kalugin-balashov@corp.mail.ru
Токенизация

/var/mail/vdomains/mail.ru/A12/test
Токенизация

/var/mail/vdomains/mail.ru/A12/test
Токенизация

/var/mail/vdomains/mail.ru/A12/test
Токенизация

/var/mail/vdomains/mail.ru/A12/test
Токенизация

/var/mail/vdomains/mail.ru/A12/test
Токенизация

http://something.org/aaa/bbb?ccc=ddd#eee
Обратный индекс

Word

{ DocID, DocID, DocID }
Snapshot
Word
Word
…
Word
0

Словарь

Count

DocID

DocID

…

DocID

Offset
Offset
Offset
0
Snapshot

Словарь

Word
Word
…
Word
0

Offset
Offset
Offset
0
Count_0x00
Count_0x01

Snapshot
Мета-словарь

Count_0xFF
Словарь

Word
Word
…
Word
0

Offset
Offset
Offset
0
XLog
Transaction

DocID

Transaction

Length

CRC32

Transaction

Cmd

CMD_WORDS

…

Cmd

Transaction

…

Cmd
XLog

DocID

{ Word, Word, Word }
Поиск
Бинарный поиск
Snapshot

Линейный поиск
Merge (>20M, >200ms)

U

XLog
NZData
DocID
DocID
…
DocID
0

Offset
Offset
…
Offset
0

Count NZ

NZ

…

NZ
Числовые зоны
10000

1000
Filter

Range(Date)
IsRead
Flagged

250
Filter

Filter

25

100

100
Ranker

QSort(Date)

Limit
NZData
DocID
DocID
…
DocID
0

Offset
Offset
…
Offset
0

Count NZ

TZData

NZ

…

NZ

Count TZ

TZ

…
TZData
C Z Length Text

GZip/NoGZip
CP1251/UTF8
Общая схема
Query

B-Search (Snapshot)
Search (XLog)

Чтение из NZData

U

Чтение числовых зон (почтовый демон)
Filter 1
Filter 2

Чтение из TZData

Limit

Ranker

Filter N

«Подсветка» слов

Формирование XML-ответа
Саджесты
Prefix
Prefix
Prefix
…
0

N

Count
Count
Count

Offset
NULL
Offset

0

0

Length Postfix

Count

…

Length Postfix

Count
Метрики качества
• Среднее время исполнения поискового запроса
• Количество поисковых запросов
• Количество пустых ответов
• Количество переходов в письмо из результатов поиска
• Количество повторных запросов
• Количество перелистываний результатов
• Среднее время перехода в письмо
Вопросы?
Дмитрий Калугин-Балашов
программист, Почта Mail.Ru
d.kalugin-balashov@corp.mail.ru
rvncerr@rvncerr.org

Дмитрий Калугин-Балашов, Mail.Ru