2010-10-22 2 views
0

Я пытался найти точные слова, и мои исследования не помогают мне.

Решения, которые я нашел:

$query .= "WHERE text REGEXP '[[:<:]]($word)[[:>:]]'"; 
// OR 
$query .= "WHERE MATCH(text) AGAINST('$word') "; 

но ни возвращающиеся мои матчи.

Я ищу символы запаса в моем db (например, $aapl). И используя LIKE '%$word%' вернет $bac, если вы ищете $ba.

+1

Опубликовать вывод "SHOW CREATE TABLE", пожалуйста. –

ответ

0

MATCH AGAINST не работает точно так, как вы думаете.

Это можно резюмировать Кейси Фултон, как «... полнотекстовой поиск только [Return] что-либо, если число результатов составляет менее 50% от общего размера таблицы ...»

Так вместо этого, я 'm ищет все LIKE, а затем отфильтровывает точные слова REGEX. Я делаю это, чтобы сократить нагрузку на процесс для REGEX.

Ниже мое решение:

$likerows = "(SELECT * FROM `tweets` WHERE text LIKE '%$q%') AS likerows "; 
$regexrows = "(SELECT * FROM $likerows WHERE text REGEXP('^.* $q .*$')) AS regexrows "; 
$query = "SELECT * FROM $regexrows "; 

Я ставлю пространство вокруг $ Q, потому что я хочу, чтобы соответствовать высказыванию структурированного слова (которое предваряется и затем пробел).

Кроме того, я ищу слова, начинающиеся с $. Это было проблемой, и вот что я сделал для решения этой проблемы:

if(substr($q, 0, 1) == '$') $q = '\\\\' . $q; // you have to escape the backslash that escapes the $ -- it's nuts. 

Удачи.

1

Вы должны будете использовать функции MySql Full Text Search, чтобы выполнить то, что вы описали выше.

Наслаждайтесь!

+0

Я прочитал эту статью, прежде чем опубликовать этот вопрос. Я включил полный текст, но я не уверен, что я делаю неправильно. – Jacksonkr

+1

@Jackson - если вы ищете строковый литерал, вам нужно использовать двойные кавычки вокруг поискового запроса, который вы пытаетесь найти. Также я считаю, что единственным типом таблицы, поддерживающим полнотекстовый поиск, является myisam, и вам также нужно добавлять полные текстовые индексы к столбцам, которые вы ищете. – Doug

+0

Я положил строковый литерал (спасибо дугу). Я получаю сообщение об ошибке, когда я использую знак доллара. Вот что у меня есть: $ query. = "ГДЕ МАТЧА (текст) ПРОТИВ (\" \ $ bac \ ")"; – Jacksonkr

Смежные вопросы