Mysql Проблемы текстового поиска - PullRequest
1 голос
/ 04 октября 2011

Я пытаюсь сделать точный поиск, но у меня возникают проблемы при поиске с помощью "Sonal", я получаю результат из записи "Sonal" & "personal".Когда я удаляю% перед именем переменной, то получаю результат, запись которого начинается с "Sonal" и не находит, что в тексте есть "Sonal".

Вот запрос:

AND (
       lower(document_text) LIKE '%".$search_name2."%' 
    OR lower(customdoc_name) LIKE '%".$search_name2."%' 
    OR lower(doc_tags) LIKE '%".$search_name2."%'
)

Rec.1 - Личный сертификатRec.2 - Сертификат Sonal.

Я хочу вернуть только 2-ю запись при поиске с помощью "Sonal".

Я не использую поле FULLTEXT.

Ответы [ 3 ]

2 голосов
/ 04 октября 2011

это может помочь,

добавить пробел сзади строки или спереди и только сзади или спереди.этим вы получите результат с «sonal» в случае начала или середины строки или конца строки.

AND (
       lower(document_text) LIKE '%".$search_name2." %' 
    OR lower(customdoc_name) LIKE '% ".$search_name2." %' 
    OR lower(doc_tags) LIKE ' %".$search_name2."%'
)
1 голос
/ 04 октября 2011

Использовать REGEXP попробовать следующее ..

AND (
       lower(document_text) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
    OR lower(customdoc_name) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
    OR lower(doc_tags) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
)

Производительность не очень хорошая, но вы получите точные результаты.

0 голосов
/ 04 октября 2011

Оператор «%» ведет себя только так.

Это подстановочный знак, означающий ЛЮБУЮ СТРОКУ.Таким образом,

  1. "% HELL%" будет соответствовать "OT * АД * O", "АД", "ПРИВЕТ", "THE_ АД " и т. Д.
  2. «HELL%» будет соответствовать только словам, начинающимся с HELL, например «HELL», «HELLO», «HELLOWW», но не «OTHELLO».
  3. «% HELL» будет соответствовать словам, заканчивающимсяс АД, как "THE_HELL", но не "HELLO".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...