2015-03-07 2 views
1

Я пытаюсь выбрать продукты, используя MATCH AGAINST в MySQL.Запрос с MATCH AGAINST строка возвращает более строгое равенство строке

Название имеет длину, указанную в качестве одной цифры плюс буквы m для счетчиков, т.е. 1m, 2m, 5m и т.д.

Когда я пытаюсь соответствовать 5m network cable с ниже запросом, он также возвращает 0.5m network cable, 1.5m network cable и т. д.

Как я могу получить точное слово MATCH на 2 символьной строке?

Мой запрос:

SELECT title, category, price 
FROM products_table 
USE index (prod_idx) 
WHERE (MATCH (title) AGAINST ('+"5m" +"network" +"cable"' IN BOOLEAN MODE)) 
+0

Я не эксперт в SQL, поэтому у меня нет ответа, но может быть, что '1.5m cable' не выбран, потому что он содержит' 5m', но поскольку он содержит 'cable', в противном случае вы можете иметь операцию * OR *, а не желаемую * и *. – mins

+0

нет опыта MATCH AGAINST, но некоторые из них содержат полное текстовое индексирование и то, что появляется в моем сознании, состоит в том, что знак '.' интерпретируется как конец предложения, а не десятичный знак. Отсюда ваши результаты. Однако не знаю, как настроить mysql для этого. Возможно, язык? – tgo

+0

Также существует проблема полнотекстового поиска коротких слов, которые игнорируются. На всякий случай. [MySQL Полнотекстовый поиск - поиск коротких слов] (http://stackoverflow.com/questions/8301586/mysql-full-text-search-search-for-short-words) – mins

ответ

0

Проблема заключается в том, что думают о FULLTEXT ". как слово ender/starter/separator, но вы хотите думать об этом как о письме. Итак, превратите его в письмо:

При вставке данных измените '.' to '_', так что 0.5m становится 0_5m, которое будет рассматриваться как слово. Сделайте то же изменение в строке поиска.

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