В настоящее время я не могу использовать индексы FULLTEXT для поиска целых слов, потому что мой сервер не позволит меньше символов, чем 4 в строке поиска.
Мне нужно обходное решение, после чего вы ребята.
Я хочу иметь возможность вводить "bmw 330", а затем получать результаты от mysql с целыми совпадениями, такими как "bmw 330".
Должен ли я рассматривать стороннюю поисковую систему для этого?
Как я могу сделать это в PHP?
Спасибо
Если вы хотите точно соответствовать, то вы хотите
SELECT * FROM table WHERE text_column = 'bmw 330'
.
Вы можете использовать что-то вроде Zend Lucene. Он написан на PHP, поэтому вам не нужно ничего устанавливать.
Вы говорите "мой сервер", поэтому я предполагаю, что у вас есть прямой доступ к его конфигурации:
Вы можете изменить минимальные символы, необходимые для поиска FULLTEXT в MySQL, просто измените следующую строку (в my.cnf) в соответствии с вашими потребностями:
[mysqld]
ft_min_word_len=3
С наилучшими пожеланиями,
Fabian
Так что, если вы пишете SQL следующим образом:
SELECT * FROM table WHERE text_column LIKE '%bmw 330%'
?
Хорошо, у вас здесь несколько предложений. Лучший способ, безусловно, использовать специализированный поисковый движок, такой как Lucene.
Если вы не можете использовать что-то вроде Lucene, у меня есть идея для массивно хакерского обходного пути.
bmw
= > bmwABCDEF
bmw 300
затем станет bmwABCDEF 300ABCDEF
и соответствующим образом соответствует.Это очень хаки и нужно пройти через возможные побочные эффекты, но может работать лучше, чем ничего.
SELECT * FROM table WHERE column LIKE '% bmw 330%'?
Как насчет
SELECT * FROM table WHERE text_column LIKE '% bmw 330 %'
(обратите внимание на пробелы после и до%)
?
Некоторые ограничения: он найдет полные слова, но не найдет
bmw 330(mint condition)
SPECIAL OFFER!!!!!bmw 330