За последние 24 часа нас посетили 22846 программистов и 1237 роботов. Сейчас ищут 706 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем Дюран, 4 мар 2021.

  1. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    257
    Симпатии:
    19
    Приветствую.
    Хотел узнать имеется ли у кого то успешный опыт реализации поиска по сайту по простому через like.
    LIKE '%query%'
    Под успешным я имею ввиду, что такой поиск устроил заказчика ну и примерно толково искал, понятно что без словоформ.
    Или там столько подводных камней вылезет, что не стоит и надеяться?
    Первое что неудобное - это что надо в каждом поисковом поле через or его дублировать title like ... or content like ...
    Скорость этого всего под вопросом.

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

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    имеется....

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

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    257
    Симпатии:
    19
    В этом способе есть минус, что никак не учитывает порядок.
    Даже не просто чтобы ранжировало как то выше/ниже если порядок совпадает.
    Но часто надо по точной фразе совпадение (модель например какая то из аббревиатур), можно в расширенном поиске ввести какие то кавычки, как в гугле, но насколько это юзабельно и никак не учитывает что если в исходном тексте например два пробела разделяют слова фразы, да и заведомое исключение коротких частей речи тоже тут помешает...
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    ну.... везде есть минусы.... но в 90% тем кто ищет порядок слов неважен
     
  5. Дюран

    Дюран Активный пользователь

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

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

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    я же говорю - для более точного пооиска - расширенная форма, где указываются оператор соединения И/ ИЛИ

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

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    257
    Симпатии:
    19
    Про "простой" - это в плане реализации ;)
    Но чтобы и искал более менее адекватно, со Сфинксом сравнений нет, там совсем другая система, очень много делов.
    Смысл в решении, если я его в реальности не смогу никуда внедрить, т.к. любая хотелка заказчика его поломает.
    Например с расширенной формой, далеко не все поведутся на вариант, что надо оператору думать как искать и набирать нужный вариант поиска.

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

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    ну с полнотекстовым поиском еще можно поиграться
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Ну я обычно заказчику говорю, примерно: "могу простой поиск, за n у.е. реализовать, но будут такие ограничения, поскольку их рождает БД, а могу поставить Sphinx/Elastic и т.п., но это будет стоить уже 5n у.е., поскольку это нужно повозиться с настройкой всего этого зоопарка".
     
  10. Drunkenmunky

    Drunkenmunky Активный пользователь

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

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    что-то профита не понимаю.... что это даст?
    зачем алфавитный порядок? а вы представляете как это "интересно и быстро" будет для большого текста в поле?

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

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Я не настаиваю. Сам еще не пробовал.
    Сокращение количества вариантов для OR\AND. Мне так кажется.
     
  13. Дюран

    Дюран Активный пользователь

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

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

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    А так?
    Код (Text):
    1. %гарри%гений%поттер%
     
  15. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    257
    Симпатии:
    19
    По смыслу это же просто AND по всем, но работать может быть и быстрее будет