Поиск на сайте, по простому, через like

Дюран

Приветствую.
Хотел узнать имеется ли у кого то успешный опыт реализации поиска по сайту по простому через like.
LIKE ‘%query%’
Под успешным я имею ввиду, что такой поиск устроил заказчика ну и примерно толково искал, понятно что без словоформ.
Или там столько подводных камней вылезет, что не стоит и надеяться?
Первое что неудобное — это что надо в каждом поисковом поле через or его дублировать title like … or content like …
Скорость этого всего под вопросом.

Так то я Сфинкс использую, но не всегда есть возможность его поставить и админить кому то.

 

ADSoft

имеется….

разбивал поисковую фразу на слова,
слова менее 3 символов исключал
по оставшимся формировал автоматом запрос a like ‘%word1%’ || a like ‘%wod2%’ итд или соединял через && &&
по умолчанию OR, а в расширенной форме поиска — выбор пользователя … И / ИЛИ
ну конечно же защиту от SQL инъекций еще надо …
ну а так в среднем, на небольших и средних объемах норм все…
ну я не знаю … на тысячах, десятки тысяч записей в таблице не тормозят

 

Дюран

В этом способе есть минус, что никак не учитывает порядок.
Даже не просто чтобы ранжировало как то выше/ниже если порядок совпадает.
Но часто надо по точной фразе совпадение (модель например какая то из аббревиатур), можно в расширенном поиске ввести какие то кавычки, как в гугле, но насколько это юзабельно и никак не учитывает что если в исходном тексте например два пробела разделяют слова фразы, да и заведомое исключение коротких частей речи тоже тут помешает…

 

ADSoft

ну…. везде есть минусы…. но в 90% тем кто ищет порядок слов неважен

 

Дюран

это часто довольно жесткое требование, особенно если слова распространенные.
Оно в выдаче тогда по одному распространенному слову кучу результатов и выдаст.
Я как то делал поиск на Sphinx по музыкальным пластинкам, у них часто в названиях слова одни и те же.

Я бы например в этом вашем варианте, который по умолчанию
— сначала выбирал по точной фразе, но это может бы потребовало дополнительно хранить поисковый контент, где оно хоть как то нормализовано, удалены лишние пробелы, всякие тире тоже заменены на пробелы
— потом бы выбирал по условию AND
— вот тут неясный момент когда слов например больше трех, тут бы пришло к месту AND по двум и OR для третьего
— и последним только OR по всем
— Добавлено —
Когда например кто то ищет по «Гарри Поттер» , а ему вся первая вкладка результатов поиска в Гарри, но других, а не Поттер, то такой поиск вряд ли устроит взыскательного заказчика.

 

ADSoft

я же говорю — для более точного пооиска — расширенная форма, где указываются оператор соединения И/ ИЛИ

ну а вообще вы спросили про простой поиск… а требования то у вас с сфинкса похоже еще остались )))

 

Дюран

Про «простой» — это в плане реализации ;)
Но чтобы и искал более менее адекватно, со Сфинксом сравнений нет, там совсем другая система, очень много делов.
Смысл в решении, если я его в реальности не смогу никуда внедрить, т.к. любая хотелка заказчика его поломает.
Например с расширенной формой, далеко не все поведутся на вариант, что надо оператору думать как искать и набирать нужный вариант поиска.

Ладно, может кто то еще знает к чему в мире пришли с like, с примерами например в форумных движках или опенсоурсе, то поделитесь.

 

ADSoft

ну с полнотекстовым поиском еще можно поиграться

 

mkramer

Ну я обычно заказчику говорю, примерно: «могу простой поиск, за n у.е. реализовать, но будут такие ограничения, поскольку их рождает БД, а могу поставить Sphinx/Elastic и т.п., но это будет стоить уже 5n у.е., поскольку это нужно повозиться с настройкой всего этого зоопарка».

 

Drunkenmunky

Попробуйте такой сценарий. Довольно простой.
Колонку в которой проводится поиск копируете в аналогичную, но с расположенным в алфавитном порядке содержимым, с удалением повторов слов, предлогов и т.д.
Далее.
Поисковый запрос разбиваете на слова и сортируете в алфавитном порядке с удалением повторов и предлогов.
Сам поиск производите в несколько этапов.
Точное соответствие в оригинальной колонке.
Содержание одного или нескольких слов поискового запроса в специальной.
Результаты поисков объединяете удалив дубли.

 

ADSoft

что-то профита не понимаю…. что это даст?
зачем алфавитный порядок? а вы представляете как это «интересно и быстро» будет для большого текста в поле?

а главное в чем основное отличие от комбинаций LIKE слов с OR/AND ?

 

Drunkenmunky

Я не настаиваю. Сам еще не пробовал.

Сокращение количества вариантов для ORAND. Мне так кажется.

 

Дюран

В сортировке смысла для like не вижу.
Ну отсортирует поисковый запрос в:
гарри гений поттер
, а в тексте будет такой порядок:
гарри гектар гений гудини поттер

и порядок ничем не поможет, если искать с like

 

Drunkenmunky

А так?

Код (Text):
  1. %гарри%гений%поттер%
 

Дюран

По смыслу это же просто AND по всем, но работать может быть и быстрее будет

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *