mysql: поиск по точному вхождению фразы?

Тема в разделе "PHP", создана пользователем AntonR, 19 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. AntonR

    AntonR

    Регистр.:
    29 ноя 2007
    Сообщения:
    176
    Симпатии:
    75
    А как сделать поиск по точному вхождению слова в предложении в базе mysql! (чтобы при поиске "слон" выдавало фразы "большой слон", но не "большая слониха")
     
  2. Excavator

    Excavator Писатель

    Регистр.:
    8 авг 2007
    Сообщения:
    6
    Симпатии:
    0
    Например так:

    Код:
    
    select * from table where col = 'слон' or col like '% слон %' or col like '% слон' or col like 'слон %'
    
    
     
  3. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    176
    Симпатии:
    103
    Нууу

    как выход - полнотекстовый поиск - с чем едят: здесь документация
    А пример такой:
    Код:
    SELECT `title` FROM `articles` WHERE MATCH (`title`) AGAINST ('+слон' IN BOOLEAN MODE);
    
    Оговорка mysql 4 +.
    Еще можно попробывать с RLIKE составить регулярное выражение.
    Ремарка к первому ответу: LIKE RLIKE - отнюдь не самый быстрый способ, особенно с перебором OR.
    И еще: ("(слон)","слон,",".Слон") - первый предложенный способ не будет выбирать строки с такими примерами, а ведь здесь тоже слово - "слон")
     
  4. phprus

    phprus Прохожие

    RLIKE и LIKE это не выход, так как при их использовании не работают индексы и таблица всегда просматривается полностью.

    ИМХО наиболее верным будет либо использование встроенного полнотекстового поиска (MySQL 4+ MyISAM-таблицы), либо использование стороннего полнотекстового движка типа sphinxsearch.com.
    По возможности я бы предпочел использовать Sphinx, так как он позволяет делать более настраиваемый и качественный поиск, а так-же выдерживает большие нагрузки чем встроенный полнотекстовый поиск.
     
  5. BaziliX

    BaziliX Постоялец

    Регистр.:
    2 авг 2007
    Сообщения:
    85
    Симпатии:
    12
    Сложность заключается в том, что может попасть строка типа:"Большой слон."
    И из-за наличия в конце точки, будет считаться, что это не в точности "слон". Поэтому нужна проверка на все возможные символы, котрые могут следаовть после слова, т.е. знаки препинания и т.п.
     
  6. phprus

    phprus Прохожие

    Такая сложность возникнет только при использовании LIKE и RLIKE, а в связи с их медленностью и использование не рекомендуется.
    Это типичная задача полнотекстового поиска, с которой они (полнотекстовые поисковые движки) справляются сами, без необходимости перекладывать различные проверки на пользователя.
     
  7. gregzem

    gregzem

    Регистр.:
    21 окт 2007
    Сообщения:
    202
    Симпатии:
    66
    Кроме LIKE есть еще REGEXP. Работает тоже медленно, но поиск можно сделать более гибким.
     
  8. AntonR

    AntonR

    Регистр.:
    29 ноя 2007
    Сообщения:
    176
    Симпатии:
    75
    Ну, а как его настроить на мой случай тогда???
     
  9. phprus

    phprus Прохожие

    Тебе поможет IN BOOLEAN MODE в полнотекстовом поиске. Ссылка на документацию с примерами уже была в этой теме.
     
Статус темы:
Закрыта.