Как это сделано: префиксный поиск

Мы живем во времена, когда кажется, что все просто и все есть. Нужно сделать масштабируемый проект — используем MongoDB, нужна очередь — вот RabbitMQ, нужно поднять функционал поиска — раз плюнуть: ставим Sphinx, Solr, ElasticSearch (нужное подчеркнуть). Но здесь лишь доля правды: — при определенном везении можно поставить нужный сервер и все зашевелится. Загвоздка с поиском состоит в том, что пользователи уже порядком привыкли к высокой планке, которую задают «большие ребята», а тот поиск, что поднимется у вас «из коробки», будет явно недотягивать. И если очередь или базу данных вы можете добить железом прежде, чем будете оптимизировать, то поиск железом не добьешь. Существую толстые книжки про настройки полнотекстового поиска, однако их мало кто читает. Сегодня я хотел бы на пальцах поговорить о том, что нужно учесть, когда вы делаете префиксный поиск с выводом результатов по мере набора слова или фразы. Мы посмотрим, как с помощью нашего проекта http://indexisto.com сделан поиск на сайте http://maximonline.ru и сравним его с тем, что есть на других сайтах. Для начала несколько примеров. Возьмем запрос «Битва за Лос Анджелес» и представим, что его напишут неправильно «Лос Анжелес биттва». Как видно, пользователь не знает точно, как пишется имя города, и забыл, как звучит название фильма, а также у него дрогнула рука в конце на слове «битва». Выберем достойные проекты рунета, в которых есть префиксный поиск, и попробуем поискать там наш запрос: Проект Правильный запрос Неправильный запрос afisha.ru 33ec81c7cb6e6b66eb86b16c66d86cac.pngвсе ОК b457e3ef074e9cf0de0f7980bbbd2c17.pngНе найдено ivi.ru a4586d49296f2a7793881a3d2d2ee485.pngвсе ОК c5142684bd7e03b39bbec4495be210d8.pngНе найдено vk.com 58c7297ec5daa02f037d9047c6c455d0.pngвсе ОК cf2715f39df2a0f74ea85ccd5aa2ef5a.pngНе найдено maximonline.ru 20f9e338aaebab27e3404f219b422d52.pngвсе ОК 3276adb902950ba3b1fba84dcd640099.pngвсе ОК Читать дальше →

© Habrahabr.ru