MySQL поиск точного слова с $ в слове

0

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

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

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

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

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

  • 1
    опубликуйте вывод "SHOW CREATE TABLE", пожалуйста.
Теги:
matching
word

2 ответа

0
Лучший ответ

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 nuts.

Желаем удачи.

1

Вы хотите использовать MySql Full Text Search, чтобы выполнить то, что вы описали выше.

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

  • 0
    Я прочитал эту статью до публикации этого вопроса. Я включил полный текст, но я не уверен, что я делаю неправильно.
  • 1
    @Jackson - если вы ищете строковый литерал, вам нужно использовать двойные кавычки вокруг поискового запроса, который вы пытаетесь найти. Также я считаю, что единственным типом таблицы, поддерживающим полнотекстовый поиск, является myisam, и вам также необходимо добавить полнотекстовые индексы в столбцы, по которым вы ведете поиск.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню