有没有一种方法可以执行全文搜索,返回在单词中找到的文字?
我一直在使用MATCH(col) AGAINST('+literal*' IN BOOLEAN MODE),但如果文本如下所示,则失败:
blah,blah,literal,blah
blahliteralblah
blah,blah,literal
请注意逗号后面没有空格。
我想把上面三个案子都退回去。

最佳答案

我认为最好是获取条目数组,然后对获取的数据执行文本操作(在本例中是搜索)!
因为任何文本操作或复杂的查询都会占用更多的资源,而且如果数据库包含大量数据,查询就会变得太慢此外,如果你正在运行
在共享服务器上查询,这会增加性能问题!
一旦从数据库中获取了数据,就可以轻松地使用regex完成所要做的工作!
更新:即使您在专用服务器上运行脚本,我的建议也是一样的!但是,如果要像您所描述的那样在布尔模式下对单词“literal”执行全文搜索,可以删除+运算符(因为您只搜索一个单词),并按如下方式构造查询:

SELECT listOfColumsNames WHERE
MATCH (colName)
AGAINST ('literal*' IN BOOLEAN MODE);

但是,即使您添加了AND操作符,您的查询也可以正常工作:使用MySQL 5.1在Apache服务器上测试!
我建议您阅读关于布尔模式下全文搜索的the documentation
此查询的唯一问题是,如果“literal”是另一个单词中的子字符串,则它与“literal”不匹配,例如:“textliteraltext”。
正如您所注意到的,您不能在单词开头使用*运算符!
因此,要完成您正在尝试的任务,最快和最简单的方法是遵循Paul的建议,使用%占位符:
SELECT listOfColumsNames
WHERE colName LIKE '%literal%';

09-16 05:10
查看更多