Обработка текста в поисковом движке выглядит достаточно простой снаружи, однако на самом деле это сложный процесс. При индексации текст документов должен быть обработан стриппером HTML, токенайзером, фильтром стопслов, фильтром словоформ и морфологическим процессором. А ещё при этом нужно помнить про исключения (exceptions), слитные (blended) символы, N-граммы и границы предложений. При поиске всё становится ещё сложнее, поскольку помимо всего вышеупомянутого нужно вдобавок обрабатывать синтаксис запроса, который добавляет всевозможные спец. символы (операторы и маски). Сейчас мы расскажем, как всё это работает в Sphinx.
Упрощённо конвейер обработки текста (в движке версий 2.х) выглядит примерно так: ![][1] Выглядит достаточно просто, однако дьявол кроется в деталях. Есть несколько очень разных фильтров (которые применяются в особом порядке); токенайзер занимается ещё чем-то помимо разбиения текста на слова; и наконец под «и т.д.» в блоке морфологии на самом деле находится ещё по меньшей мере три разных варианта. Поэтому более точной будет следующая картина: ![][2] [А теперь перейдём к деталям][3]
[1]: //habrastorage.org/files/a7e/c78/da8/a7ec78da80c0478990cc94c385f1891a.png
[2]: //habrastorage.org/files/12d/9f1/74f/12d9f174fa5e40438f4d99489315d073.png
[3]:
http://habrahabr.ru/post/246679/#habracut