2013-06-10 3 views
0

Я играл с boolean mode с поиском MySQL fulltext, но я не понимаю результаты, которые я получаю порой.Смысл получения полного текстового результата в булевом режиме

Например, вот несколько строк данных ..

auction_id,'name' 
100543,'2011-12 Fleer Retro patch auto' 
100544,'2011-12 Fleer Retro patch auto jordan' 
100545,'2011-12 Fleer Retro autograph' 
100546,'2011-12 Fleer Retro autographed' 
100547,'2011-12 Fleer Retro auto' 
100549,'1999 jordan auto' 
100550,'1999 auto jordan' 
100551,'1999 autograph jordan' 
100552,'1999 autographed jordan patch' 
100553,'1999 jordan non auto' 

Теперь, если я выполнить запрос:

SELECT auction_id,NAME,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto' IN BOOLEAN MODE); 

я получаю строки 100544,100549,100550,100553 возвращаемые, что является правильным. Однако, если я запускаю этот запрос:

SELECT auction_id,NAME,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -non' IN BOOLEAN MODE); 

Получаемые те же результаты возвращаются; не должен 100553 уйти, так как он имеет «не» в name?

Кроме того, если я изменить его на:

SELECT auction_id,NAME,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -"non auto"' IN BOOLEAN MODE); 

я не дал никаких результатов; должен ли я получить их все, кроме 100553?

ответ

1

Как указано под Boolean Full-Text Searches:

булевы полнотекстовый поиск имеет следующие характеристики:

[ deletia ]

Как указано под Natural Language Full-Text Searches:

Некоторые слова игнорируются в полнотекстового поиска:

  • Любое слово, которое слишком коротка игнорируется. Минимальная длина слов по умолчанию, найденная полнотекстовыми поисками, - это три символа для индексов поиска InnoDB или четыре символа для MyISAM. Вы можете управлять отключением, установив параметр конфигурации перед созданием индекса: innodb_ft_min_token_size для опции InnoDB индексов поиска, или ft_min_word_len для MyISAM.
+0

Я только что проверил свой «ft_min_word_len», и он уже был установлен в '2'. – Brett

+0

Я считаю, что я изменил это довольно давно, прежде чем эта база данных была даже построена. Чтобы убедиться, что я только что перестроил индекс и получил те же результаты. – Brett

+0

@Brett: «non» - [секундомер] (http://dev.mysql.com/doc/en/fulltext-stopwords.html). – eggyal