2013-09-25 3 views
2

Я сравниваю результаты запроса, какПочему MATCH AGAINST возвращает разные результаты, чем LIKE?

SELECT * FROM object_search 
WHERE 
    keywords LIKE '%,woman,%' 
AND keywords LIKE '%,man,%' 

в

SELECT * FROM object_search 
WHERE 
    MATCH (keywords) AGAINST ('+(",woman,") +(",man,")') 

я ожидал бы точно такие же результаты, но первый запрос выкладывает около 300 результатов, а второй ближе к 3000.

В чем разница между ними и как получить тот же результат с использованием полнотекстовой функциональности?

+0

Не могли бы вы предоставить структуру своего стола? А также некоторые строки, которые были возвращены во 2-м случае, но не в 1-й. –

+0

@AlmaDoMundo Кажется, что запрос 'MATCH AGAINST' требует только одного из двух ключевых слов, присутствующих в строке. Также это таблица InnoDB. –

+0

Я предполагаю, что речь идет о словах 'woman' и' man', так как 'man' является подсловом' woman' (но, похоже, это не так, как должно работать). Вместо этого попробуйте что-то вроде 'foo' и' bar', т. Е. Непересекающееся –

ответ

1

Оператор + используется в поиске IN BOOLEAN MODE. I думаю он будет проигнорирован в NATURAL LANGUAGE MODE (по умолчанию).

Try:

SELECT * FROM object_search 
WHERE MATCH (keywords) 
    AGAINST ('+woman +man' IN BOOLEAN MODE); -- could return rows containing both "man" and "woman" (ignoring ft_min_word_len, see below) 

Кроме того, полнотекстовые индексы будут охватывать только слова. Знаки пунктуации (например, ,) всегда будут игнорироваться. Вы не можете «полнотекстового поиска» не буквенно-цифровых символов.

И наконец, по умолчанию слова длиной менее 4 символов игнорируются. Поэтому по умолчанию «человек» не индексируется. Этот предел можно изменить с помощью опции конфигурации ft_min_word_len.

Также обратите внимание на stopwords (общие слова, которые никогда не индексируются).

+0

@Cobra_Fast Если все еще возможно, переосмыслите структуру таблиц. Сохранение значений, разделенных комой (т. Е. Нескалярных данных) в одном поле, является плохой практикой. [Нормализовать структуру] (http://en.wikipedia.org/wiki/First_normal_form), если сможете. – RandomSeed

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