我正在使用全文搜索,查询在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存在的情况吗?
任何人都可以帮助我吗?
感谢。
答案 0 :(得分:0)
由于MyISAM全文的内部禁用词列表,它最有可能。
变量值应该是包含该文件的文件的路径名 禁用词列表,或禁用禁用词过滤的空字符串。该 服务器在数据目录中查找该文件,除非是绝对的 路径名用于指定不同的目录。改变之后 此变量的值或禁用文件的内容, 重启服务器并重建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'