如何在where子句中执行单引号的mysql全文搜索查询?

时间:2013-12-19 14:54:34

标签: mysql

我正在使用全文搜索,查询在where子句中使用单引号返回值但不准确。

SELECT `id`, `itemid`, `title`, 
MATCH( `itemid`, `title`, `product_id`,`p1_name`, `p2_name`, `p3_name`, `p4_name` ) 
AGAINST ( "men\'s" IN BOOLEAN MODE ) AS score FROM `deals` 
WHERE `active_flag`='1' AND 
MATCH( `itemid`, `title`, `product_id`,`p1_name`, `p2_name`, `p3_name`, `p4_name`) 
AGAINST ( "men\'s" IN BOOLEAN MODE ) !=0 
ORDER BY score DESC

它应该返回关键词恰好是“Men's”(不包括“双引号”)的情况。但它会返回男人和s存在的情况吗?

任何人都可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:0)

由于MyISAM全文的内部禁用词列表,它最有可能。

根据this documentation

  

变量值应该是包含该文件的文件的路径名   禁用词列表,或禁用禁用词过滤的空字符串。该   服务器在数据目录中查找该文件,除非是绝对的   路径名用于指定不同的目录。改变之后   此变量的值或禁​​用文件的内容,   重启服务器并重建FULLTEXT索引。

我在我的ini文件中更改了

+ft_stopword_file = C:\ProgramData\MySQL\MySQL Server 5.6/mysql_ft_stopword_file.txt

然后重新启动服务器,即使文件不存在也会启动,因此您不必创建一个。重启后,您必须重建表。

我现在设法使用此查询获得结果

SELECT * FROM test.fttest 
WHERE MATCH(txt) AGAINST("men's" IN BOOLEAN MODE);

这也是

SELECT * FROM test.fttest 
WHERE MATCH(txt) AGAINST('men\'s' IN BOOLEAN MODE);

如果您有很多数据,以后建立自己的禁用词列表可能是一个好主意,因为没有单词被视为停用词,因此索引会变得更大。

答案 1 :(得分:-1)

逃脱'与其中两人''

  where name = 'men''s'