Дюран
Приветствую.
Хотел узнать имеется ли у кого то успешный опыт реализации поиска по сайту по простому через 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):
%гарри%гений%поттер%
Дюран
По смыслу это же просто AND по всем, но работать может быть и быстрее будет