Mysql MATCH AGAINST - IN BOOLEAN MODE проблема

Мне нужно найти следующую строку: 'С++'

Мой sql-запрос выглядит так:

SELECT *
FROM shop_product
WHERE
   MATCH(shop_product.name, shop_product.product_model, shop_product.keywords, shop_product.part_number, shop_product.upc, shop_product.brand_name)
   AGAINST ('c++' IN BOOLEAN MODE))
GROUP BY `product_id`
LIMIT 0, 25

Этот скрипт не возвращает никаких результатов, даже если существуют записи, содержащие это слово. Как это решить?

Спасибо.


person Emanuel    schedule 17.07.2010    source источник
comment
А у ваших столбцов есть соответствующие полнотекстовые индексы? Являются ли ваши таблицы таблицами MyISAM?   -  person Mark Elliot    schedule 17.07.2010
comment
Да, столбцы являются полнотекстовыми индексами в таблице MyIsam.   -  person Emanuel    schedule 17.07.2010


Ответы (3)


Слова, содержащие менее четырех символов, не ищутся в ЛОГИЧЕСКОМ РЕЖИМЕ или ЕСТЕСТВЕННОМ РЕЖИМЕ.

person user1512374    schedule 24.07.2012

«+» не является «словным» символом. Возможно, вам придется использовать LIKE или REGEXP.

person Naktibalda    schedule 17.07.2010
comment
Есть ли escape-символ для MATCH AGAINST? - person Emanuel; 17.07.2010

Вы можете искать без BOOLEAN MODE:

SELECT *
FROM shop_product
WHERE
   MATCH(shop_product.name, shop_product.product_model, shop_product.keywords, shop_product.part_number, shop_product.upc, shop_product.brand_name)
   AGAINST ('c++'))
GROUP BY `product_id`
LIMIT 0, 25

Я думаю, что + - это специальный символ для логического режима.

person JochenJung    schedule 17.07.2010
comment
насколько я понял, проблема в том, что он даже не индексирует +s. Хотя я могу быть совершенно не прав! - person Martin Smith; 17.07.2010