Приветствую. Хотел узнать имеется ли у кого то успешный опыт реализации поиска по сайту по простому через like. LIKE '%query%' Под успешным я имею ввиду, что такой поиск устроил заказчика ну и примерно толково искал, понятно что без словоформ. Или там столько подводных камней вылезет, что не стоит и надеяться? Первое что неудобное - это что надо в каждом поисковом поле через or его дублировать title like ... or content like ... Скорость этого всего под вопросом. Так то я Сфинкс использую, но не всегда есть возможность его поставить и админить кому то.
имеется.... разбивал поисковую фразу на слова, слова менее 3 символов исключал по оставшимся формировал автоматом запрос a like '%word1%' || a like '%wod2%' итд или соединял через && && по умолчанию OR, а в расширенной форме поиска - выбор пользователя ... И / ИЛИ ну конечно же защиту от SQL инъекций еще надо ... ну а так в среднем, на небольших и средних объемах норм все... ну я не знаю ... на тысячах, десятки тысяч записей в таблице не тормозят
В этом способе есть минус, что никак не учитывает порядок. Даже не просто чтобы ранжировало как то выше/ниже если порядок совпадает. Но часто надо по точной фразе совпадение (модель например какая то из аббревиатур), можно в расширенном поиске ввести какие то кавычки, как в гугле, но насколько это юзабельно и никак не учитывает что если в исходном тексте например два пробела разделяют слова фразы, да и заведомое исключение коротких частей речи тоже тут помешает...
это часто довольно жесткое требование, особенно если слова распространенные. Оно в выдаче тогда по одному распространенному слову кучу результатов и выдаст. Я как то делал поиск на Sphinx по музыкальным пластинкам, у них часто в названиях слова одни и те же. Я бы например в этом вашем варианте, который по умолчанию - сначала выбирал по точной фразе, но это может бы потребовало дополнительно хранить поисковый контент, где оно хоть как то нормализовано, удалены лишние пробелы, всякие тире тоже заменены на пробелы - потом бы выбирал по условию AND - вот тут неясный момент когда слов например больше трех, тут бы пришло к месту AND по двум и OR для третьего - и последним только OR по всем --- Добавлено --- Когда например кто то ищет по "Гарри Поттер" , а ему вся первая вкладка результатов поиска в Гарри, но других, а не Поттер, то такой поиск вряд ли устроит взыскательного заказчика.
я же говорю - для более точного пооиска - расширенная форма, где указываются оператор соединения И/ ИЛИ ну а вообще вы спросили про простой поиск... а требования то у вас с сфинкса похоже еще остались )))
Про "простой" - это в плане реализации Но чтобы и искал более менее адекватно, со Сфинксом сравнений нет, там совсем другая система, очень много делов. Смысл в решении, если я его в реальности не смогу никуда внедрить, т.к. любая хотелка заказчика его поломает. Например с расширенной формой, далеко не все поведутся на вариант, что надо оператору думать как искать и набирать нужный вариант поиска. Ладно, может кто то еще знает к чему в мире пришли с like, с примерами например в форумных движках или опенсоурсе, то поделитесь.
Ну я обычно заказчику говорю, примерно: "могу простой поиск, за n у.е. реализовать, но будут такие ограничения, поскольку их рождает БД, а могу поставить Sphinx/Elastic и т.п., но это будет стоить уже 5n у.е., поскольку это нужно повозиться с настройкой всего этого зоопарка".
Попробуйте такой сценарий. Довольно простой. Колонку в которой проводится поиск копируете в аналогичную, но с расположенным в алфавитном порядке содержимым, с удалением повторов слов, предлогов и т.д. Далее. Поисковый запрос разбиваете на слова и сортируете в алфавитном порядке с удалением повторов и предлогов. Сам поиск производите в несколько этапов. Точное соответствие в оригинальной колонке. Содержание одного или нескольких слов поискового запроса в специальной. Результаты поисков объединяете удалив дубли.
что-то профита не понимаю.... что это даст? зачем алфавитный порядок? а вы представляете как это "интересно и быстро" будет для большого текста в поле? а главное в чем основное отличие от комбинаций LIKE слов с OR/AND ?
В сортировке смысла для like не вижу. Ну отсортирует поисковый запрос в: гарри гений поттер , а в тексте будет такой порядок: гарри гектар гений гудини поттер и порядок ничем не поможет, если искать с like