MySQL поиск точного слова с $ в слове - PullRequest
0 голосов
/ 22 октября 2010

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

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

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

, но ни один из них не возвращает мои совпадения.

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

Ответы [ 2 ]

1 голос
/ 22 октября 2010

Вы захотите использовать Полнотекстовый поиск MySql функций для выполнения того, что вы описали выше.

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

0 голосов
/ 23 октября 2010

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

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

Так что вместо этого я ищу все 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.

Удачи.

...