sql матч против BOOLEAN MODE возвращает 0 результатов - PullRequest
0 голосов
/ 17 октября 2011

Это запрос:

SELECT title from prod_table WHERE MATCH(title) AGAINST ('-Gears Of War' IN BOOLEAN MODE) limit 30;

Таблица определенно заполнена, а вот схема

SQL query: explain prod_table;
Rows: 22
Field           Type        Null        Key     Default     Extra
PRprodinfo_id   int(11)     NO          PRI     NULL    auto_increment
PRid            varchar(64) NO  UNI     NULL    
main_category   varchar(64) YES         NULL    
title           varchar(128)NO  MUL     NULL    
agegroup        varchar(16) YES         NULL    
author          varchar(128)YES         NULL    
sex             varchar(8)  YES         NULL    
actors          varchar(256)YES         NULL    
platform        varchar(64) YES         NULL    
artist          varchar(128)YES         NULL    
genre           varchar(128)YES         NULL    
description     text        YES         NULL    
manuf           varchar(128)YES         NULL    
manufID         varchar(64) YES         NULL    
prodcat         varchar(128)YES         NULL    
prodcatID       int(11)     YES         NULL    
userrating      decimal(1,1)NO      NULL    
profrating      decimal(1,1)NO      NULL    
lowprice        decimal(10,2)   NO      NULL    
highprice       decimal(10,2)   NO      NULL    
imageURL        varchar(128)    NO      NULL    
dateadded       timestamp       NO      CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

Также пробовали:

SELECT title from PRprodINFO WHERE MATCH(title) AGAINST ("-'Gears Of War'" IN BOOLEAN MODE) limit 30;

и

SELECT title from PRprodINFO WHERE MATCH(title) AGAINST ("'-Gears Of War'" IN BOOLEAN MODE) limit 30;

но они как бы отменяют себя, некоторые из результатов:

'Gears and Gear Cutting Workshop Practice'
'Gears of War 2 Signature Series Guide Bradygames Signature Guides'
'Gears of War 2 Last Stand Edition Guide Bradygames Signature'
'Cream  Disraeli Gears  Classic Albums DVD RETAIL BUT NOT AVAILABLE TO RENT'
'Gears of War 2 Limited Edition'
'Gears Of War'
'Gears of War 2'
'Gears of War Triple Pack'
'Gears of War 2 Game of the Year Edition'
'Gears of War 3 Limited Edition'
'Gears of War 3'

Это именно то, чего я не хочу

Я в тупике -также, в поле заголовка есть индекс FULLTEXT.

Спасибо

Даррен

Ответы [ 3 ]

0 голосов
/ 17 октября 2011

Попробуйте:

SELECT title from prod_table WHERE MATCH(title) AGAINST ( "-'Gears Of War'" IN BOOLEAN MODE) limit 30;

с одинарными кавычками вокруг слов.

0 голосов
/ 17 октября 2011

Вы не сможете решить эту проблему, используя оператор MATCH AGAINST.Решением было бы отменить запрос LIKE .Например:

SELECT title FROM prod_table WHERE title NOT LIKE '%Gears Of War%' LIMIT 30;
0 голосов
/ 17 октября 2011

Использование одного запроса отрицания не поддерживается. Прочитайте документацию . В нем говорится:

Примечание: оператор - действует только для исключения строк, которые иначе соответствует другим условиям поиска. Таким образом, поиск в логическом режиме, который содержит только термины с предшествующим - возвращает пустой результат. Это не вернуть «все строки, кроме тех, которые содержат какие-либо исключенные термины».

Так что это невозможно. Вы должны включить в запрос что-то еще, чтобы исключить строки, совпадающие с -.

Просто мое мнение здесь, но я думаю, что было бы слишком интенсивно пытаться вернуть список всех строк, которые не соответствуют произвольному условию. Наилучшим решением было бы использовать запрос «как» следующим образом.

SELECT title from prod_table 
WHERE NOT title LIKE '%Gears Of War%' 
limit 30;
...