2013-04-30 3 views
2

Я сделал сайт для магазина, который использует таблицу sql для управления данными о своих продуктах.MySQL Full Text Search нечетное поведение

Я использовал полнотекстовый поиск, чтобы пользователи могли легко искать их в наличии.

Поиск выполняет запросы в соответствии термин с брендом, название продукта и описание, например:

$search_prods = $db_connection->query(" 

    SELECT  `id`,`name`,`description` 
    FROM  `Products` 
    WHERE  Match(`brand`) Against('$term') 

    UNION 

    SELECT  `id`,`name`,`description` 
    FROM  `Products` 
    WHERE  Match(`description`) Against('$term') 

    UNION 

    SELECT  `id`,`name`,`description` 
    FROM  `Products` 
    WHERE  Match(`name`) Against('$term') 

    "); 

поиска работает отлично, за исключением, когда имеем дело с брендом «Пандора». Если я ищу другую марку, я получаю свои результаты. Если я ищу Пандору, я получаю результаты с Pandora в названии и результаты с Pandora в описании. Однако я не могу получить никаких результатов с Pandora в бренде. Они существуют! Я попытался запустить запросы в MySql, и у меня такая же проблема.

Что это такое в поисках «Пандоры» в колонке «Бренд», которая вызывает проблему? У кого-нибудь есть мысли?

Спасибо!

ответ

1

По умолчанию MySQL полнотекстовый поиск ignore common words:

слова, которые присутствуют в 50% или более строк считаются общими и не совпадают.

Если более 50% изделий марки «Пандора», то это объяснение.

Возможно, вы захотите добавить модификатор IN BOOLEAN MODE в свои запросы, чтобы отключить эту функцию.

Кстати, вы могли бы (читай действительно должен) переписать запрос следующим образом:

SELECT id, name, description 
FROM Products 
WHERE MATCH(brand, description, name) AGAINST('$term' IN BOOLEAN MODE) 
+0

Спасибо за ответ, и спасибо за предложение. Первоначально я написал свой запрос, и он не прошел. Поскольку пример, который я читал только из одного столбца, я предположил, что это ограничение функции. Наверное, я сделал опечатку в первый раз или что-то в этом роде ... – user1537360

+0

@ user1537360 "* Я написал свой запрос, как это первоначально *" => Вы имеете в виду первую часть моего ответа (добавление 'BOOLEAN MODE') или вторая часть (упрощение запроса)? Мой основной вопрос: разрешил ли он проблему? ;) – RandomSeed

+0

Я имел в виду, что я изначально структурировал свой запрос, как в вашем предложении, для консолидации всех трех. После прочтения вашего комментария я попробовал еще раз и получил те же проблемы, но потом заметил, что ваш запрос включал логический режим. Когда я включил булевский режим, он решил проблему. Что касается проблемы, о которой я говорил в OP, вы были на месте. Проблема заключалась в том, что 5/8 моих демонстрационных продуктов были этого бренда. Я добавил несколько продуктов с другими брендами, и проблема была решена. Я не исследовал эту функцию должным образом, потому что я был в такой спешке, поэтому спасибо за помощь! – user1537360

Смежные вопросы