MySQL Полнотекстовый поиск - поиск коротких слов - PullRequest
1 голос
/ 29 ноября 2011

У меня проблема.Я сделал простой поисковик, который ищет по марке и модели автомобиля.По соображениям производительности запросов и большого количества данных в базе данных я решил использовать полнотекстовый поиск.Все нормально, но теперь я сталкиваюсь с проблемой:

Я хотел бы найти все автомобили с маркой "Audi" и с моделью "Q7".На данный момент у меня есть этот запрос SQL, но он не работает правильно, из-за длины слова "Q7":

SELECT `a`.`id`, `a`.`title`, `a`.`askprice`, `a`.`description`, `a`.`picture`
FROM (`mm_ads` as a)
WHERE `a`.`category` =  '227'
AND `a`.`askprice` >= '0'
AND `a`.`askprice` <= '144000'
AND (MATCH(a.title) AGAINST ('+audi +q7' IN BOOLEAN MODE ))
GROUP BY `a`.`id`
ORDER BY `a`.`id` ASC
LIMIT 30

У меня нет доступа для изменения файла конфигурации MySQL, чтобы установить ft_min_word_len до значения 2. На данный момент значение равно 3. Есть ли другой способ справиться с этим?


Вот еще одна проблема:

Я хотел бы получить все автомобили марки "BMW "и модель" 116 ".Например, у меня есть машина с именем BMW, 1, 116i.Мой запрос SQL:

`SELECT `a`.`id`, `a`.`title`, `a`.`askprice`, `a`.`description`, `a`.`picture`
FROM (`mm_ads` as a)
WHERE `a`.`category` =  '227'
AND `a`.`askprice` >= '0'
AND `a`.`askprice` <= '144000'
AND (MATCH(a.title) AGAINST ('+bmw +116' IN BOOLEAN MODE))
GROUP BY `a`.`id`
ORDER BY `a`.`id` ASC
LIMIT 30`

Поиск возвращает 0 строк.Зачем?Все входные строки («BMW», «116») имеют минимальную длину 3. Что я делаю не так?

С уважением, Марио

Ответы [ 3 ]

5 голосов
/ 29 ноября 2011

У меня была похожая проблема при сопоставлении с (относительно длины текста), и мой ответ состоял в том, чтобы сначала strlen строка и переключаться между like и match для более коротких слов. Не то, что я бы назвал изящным, но это было все, что я мог сделать, так как у меня тоже не было доступа к конфигурации.

Что касается второго вопроса, вы уверены, что по умолчанию не 4? Я помню, я не мог найти термин «искусство» в моем случае. 3 буквы. Пришлось сходить со всем ниже 4 символов.

2 голосов
/ 29 ноября 2011

Если у вас нет доступа к файлу конфигурации и вы не можете его изменить, я боюсь, что делать очень мало.

Изменение ft_min_word_len требует перезапуска сервера и полной перестройки полнотекстового индекса.

Как найдено здесь

1 голос
/ 09 сентября 2015

Попробуйте:

для этого поиска: "bmw 116i"

(MATCH (a.title) ПРОТИВ ('+ bmw + 116i "bmw 116i"' В БУЛЬШЕНСКОМ РЕЖИМЕ))

не лучшее решение, но может помочь ...

...