sql MATCH AGAINST BOOLEAN MODE返回0结果

时间:2011-10-17 12:42:29

标签: mysql sql match-against

这是查询:

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索引。

由于

的Darren

3 个答案:

答案 0 :(得分:0)

不支持使用单个否定查询。阅读documentation。它声明:

  

注意: - 运算符仅用于排除其他行   与其他搜索字词匹配。因此,布尔模式搜索即   仅包含前面带有的术语 - 返回空结果。它不是   返回“包含任何排除条款的行以外的所有行。”

所以这是不可能的。您必须包含其他内容才能查找查询,以排除与 - 匹配的行。

我的观点仅限于此,但我认为尝试返回与某个任意术语不匹配的所有行的列表会过于密集。最好的解决方案是使用“like”查询,如下所示。

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

答案 1 :(得分:0)

试试这个:

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

用单引号括起来。

答案 2 :(得分:0)

使用MATCH AGAINST运算符无法解决此问题。解决方案是negate a LIKE查询。例如:

SELECT title FROM prod_table WHERE title NOT LIKE '%Gears Of War%' LIMIT 30;