Полнотекстовый поиск в Почте
3
`
Почтовый демон
(хранилище)
Поисковый демон
Front-end (Web-сервер)
Data
Query/Answer
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
Аномалия №1
/var/mail/folder1/folder2/folder3/folder4/folder5/mail.ru/username
https://e.mail.ru/cgi-bin/msglist#gosearch?q_read=2&q_folder=all
Аномалия №1
Аномалия №1
/var/mail/folder1/folder2/folder3/folder4/folder5/mail.ru/username
https://e.mail.ru/cgi-bin/msglist#gosearch?q_read=2&q_folder=all
Аномалия №1
/var/mail/folder1/folder2/folder3/folder4/folder5/mail.ru/username
https://e.mail.ru/cgi-bin/msglist#gosearch?q_read=2&q_folder=all
Аномалия №1
/var/mail/folder1/folder2/folder3/folder4/folder5/mail.ru/username
https://e.mail.ru/cgi-bin/msglist#gosearch?q_read=2&q_folder=all
Аномалия №1
/var/mail/folder1/folder2/folder3/folder4/folder5/mail.ru/username
https://e.mail.ru/cgi-bin/msglist#gosearch?q_read=2&q_folder=all
Обратный индекс
Обратный индекс
Word {DocID, DocID, DocID}
Snapshot
Словарь
Word Offset
Word Offset
…
Word Offset
0 0 Признак конца словаря
Snapshot
Словарь
Snapshot
Word Offset
Word Offset
…
Word Offset
0 0
Признак конца словаря
Count DocID DocID … DocID
Snapshot
Аномалия №2
Словарь (1M)
Аномалия №2
Словарь (100M)
Аномалия №2
Аномалия №2
Словарь (100M)
Мета-словарь (256*4)
Word Offset
Word Offset
…
Word Offset
0 0
Count DocID DocID … DocID
N0
N1
…
N255
Аномалия №2
Transaction Transaction Transaction … Transaction
DocID Length CRC32 Command Command … Command
XLog
XLog
DocID {Word, Word, Word}
` Snapshot XLog
Бинарный поиск Линейный поиск
“U”
>20M, Merge
DocID Offset
DocID Offset
…
DocID Offset
0 0
Признак конца словаря
Count NZ NZ … NZ
NZData
Чтение из почтового демона
Чтение из NZData
Не удалось
Filter Filter Filter Ranker Limit
10000 1000 250 100 100 25
IsRead
Flagged
Date (Range) QSort (Date) SQL LIMIT
` DocID Offset
DocID Offset
…
DocID Offset
0 0
Признак конца словаря
Count NZ NZ … NZ Count TZ …
NZData
TZData
` TZData
Length Text
Length Text
Length Text
GZip gzseek
GZip lseek
Query
B-Search
(Snapshot) Search (XLog)
U
Чтение
числовых зон
(почтовый
демон) Чтение из NZData
Filter 1
Filter 2
Filter N
Ranker
Limit
Чтение из TZData
«Подсветка» слов
XML-Ответ
Prefix Count Offset
Prefix Count NULL
Prefix Count Offset
…
0 0 0
N Length Postfix Count … Length Postfix Count
M = 6 M = 6 M = 2
Вопросы?
Д м и т р и й К а л у г и н - Б а л а ш о в
п р о г р а м м и с т , П о ч т а M a i l . R u
d . k a l u g i n - b a l a s h o v @ c o r p . m a i l . r u
r v n c e r r @ r v n c e r r . o r g