Нормальный поиск, Sphinx и мать его Левенштейн

superhero-costumes-for-men

Нормальный поиск, Sphinx и мать его Левенштейн

На сегодня, я могу с уверенностью сказать, что с оптимизацией проектов мы разобрались чуть больше чем полностью. За всю практику нашу пока не попалось ни одного проекта, который бы не поднялся.

Да, не всегда получается добиться генерации страниц в 200 мс или на сложных выборках до 1 сек, но это обусловлено бюджетами проектов на доработку и железо. В целом скажем до 5м товаров, с некоторыми ограничениями,- проблем с Opencart я не вижу.

Однако отдельно от общих методов оптимизации стоит вопрос оптимизации поиска. В целом Sphinx спасает, и в нем отлично можно использовать встроенную морфологию, отлично настраивать релевантность выдачи, он мегабыстр и поиск по 1 000 000 записей происходит моментально. Но есть одна большая проблема — это коррекция ошибок.

Существует множество алгоритмов, которые позволяют производить коррекцию ошибок — это использование триграмм, Soundex, Metaphone, расстояние Левенштейна и еще еще еще.
К сожалению ни один из этих алгоритмов не идеален и для пристойной выдачи результатов с опечатками, да еще и в случае использования со сфинксом необходимо использовать их в связке, и возможно даже по нескольким индексам, так как механизм работы сфинкса с использованием встроенной морфологии накладывает ограничения на базовые элементы вхождений.

Вобщем на сегодня я заставил сфинкс искать вот такие вот штуки:

sphinx1

sphinx2

Это автоподстановка запроса при помощи подбора вхождений и поиск вхождений по триграммам.

Но этот метод не идеален во многих случаях, связанных с коллизиями самого алгоритма. А также он бессилен в случае опечаток связанных с перестановкой букв  — вида молоко -> омлоко. И вот тут на помощь очень здорово пришел бы алгоритм Левенштейна. Но у нас UTF-8 кирилца и нативно его использовать невозможно в силу разного размера кодирования символов.

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

sphinx3

 

В версии Sphinx 2.3.2 - появились встроенные функции  suggest и qsuggest. Но во первых он пока еще в Beta, во вторых они неполноценно работают как wlidcard-запросы, если приводить аналог с SQL — то можно сделать SELECT LIKE %query или SELECT LIKE query%, а полноценная мощь нам обещана в будущем:

* QSUGGEST may receive in future an update to be able to process also all the words at the input, not just the last one.

И опять же непонятно пока, как эти функции поведут себя с кириллицей — пока не было времени потестить.

Пока писал статью таки протестил — очень многообещающие показатели. С кириллицей работает. И, я даже знаю как это впердолить в модуль.
Вот полюбуйтесь:

 

 

Ну и еще красивых вам картинок на добавку.

sphinx4

p.s. Чет пост получился немного постным — поэтому страпонофорп- толстомордый гандон, а йобутилс — зачуханный каблучара!

Хуйнаныр(14)Очко(1)

Запостить высер

14 Высеров на "Нормальный поиск, Sphinx и мать его Левенштейн"

Стучать мне на мыло
avatar

Сортировать:   Свежие | Тухлые | Хуйнанырные
Вася Хуйкин
робот-вертер
Вася Хуйкин
2 месяцев 8 дней назад

Насколько часто это используется покупателями, чтобы так залупаться?

Nameless
робот-вертер
Nameless
2 месяцев 8 дней назад

Думаю во многом тут еще и спортивный интерес доказать себе, что это возможно и подняться на новую рамку мастерства. А с точки зрения пользователя заколеблешься рыскать в мегамаркетах типа юлмарта в какой же там категории нужная штуковина и такой поиск очень удобен, в нишевых магазинах наверное не нужен такой изврат в большинстве случаев.

DIN
робот-вертер
DIN
2 месяцев 6 дней назад

Было бы очень замечательно, увидеть от Вас инструкцию по установке Sphinx на opencart.pro.

OldAine
робот-вертер
2 месяцев 6 дней назад

Крутая штука, поддерживаю на все 100%. Такой должен быть оборудован любой магазин и не важно сколько там товаров. Поиск должен искать и точка.

Если будете делать такой модуль, не забудьте про версию 1.5 пожалуйста.

Автор камента сцыкло
робот-вертер
Автор камента сцыкло
2 месяцев 5 дней назад

сцылку на модуль в студею

wpDiscuz