2013-06-27 8 views
1

У меня проблема.Mysql Полнотекстовый поиск с знаком плюса

В моем MySql db у меня 40000 строк в таблице продуктов. Таблица имеет столбец T9Text. Один из моих строк T9Text области, как это:

UNISNLS106B UNI.SNLS 106В SNL,-106B M.OT. 12V 2 Delik МОТОР КРАФТ TIPI UNIPOINT 66-205 66205 F02Z-11390-А F02Z11390A E90Z-11390-А E90Z11390A F4DZ-11390-А F4DZ11390A F3VY-11390-А F3VY11390A E90Z-11390-А E90Z11390A FORD ЭСКОРТ Mercury Tracer FORD

Для автоматического завершения процесса, я запустил хранимую процедуру в db. Это так:

SELECT p.Code, 
    p.Name, 
    p.`T9Text`, 
    MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) AS SCORE 
FROM product p 
WHERE MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) >0 
GROUP BY p.Name 
ORDER BY SCORE DESC 

Как это, он отлично работает и возвращает только одну строку.

Но мне нужно, чтобы написать мой, где состояние, как это:

MATCH (p.T9Text) AGAINST ('+*UNI* +*SNLS* +*106B*' IN BOOLEAN MODE) >0 

С выше кода он возвращает строки 1877. Это как знак плюса не работает

MATCH (p.T9Text) AGAINST ('+*UNISNLS106B*' IN BOOLEAN MODE) >0 
MATCH (p.T9Text) AGAINST ('+*NISNLS106B*' IN BOOLEAN MODE) >0 

С первым запросом возвратите 1 строку, но второй запрос возвращает 0 строку.

Итак, есть мой вопрос: В mysql полнотекстовом поиске я не могу использовать + тест выражение? Если нет, есть ли способ сделать это? (за исключением случаев, когда LIKE)

+0

Вы попробовали экранировать его как '\ +'? –

+1

Я думаю, что проблема заключается в '*' - это можно использовать только в конце слова. – Barmar

+0

@ DannyBeckett 'MATCH (p.T9Text) ПРОТИВ ('\ + * NISNLS106B *' В РЕЖИМЕ BOOLEAN)' ничего не вернул – makcura

ответ

1

От Boolean Full-Text Search docs;

Звездочка служит оператором усечения (или подстановки). В отличие от других операторов, это должно быть прилагается к слову, которое должно быть затронуто. Слова совпадают, если они начинаются со слова, предшествующего оператору *.

Иными словами, булевский поиск не поддерживает «содержит» с использованием оператора *.

+0

спасибо Isaksson – makcura