有没有办法执行FULLTEXT搜索,返回在单词中找到的文字?
我一直在使用MATCH(col) AGAINST('+literal*' IN BOOLEAN MODE)
,但如果文字如下,则会失败:
blah,blah,literal,blah
blahliteralblah
blah,blah,literal
请注意逗号后面没有空格。
我希望返回上述所有三种情况。
答案 0 :(得分:2)
我认为应该更好地获取条目数组,然后对获取的数据执行文本操作(在本例中为搜索)!
因为任何文本操作或复杂查询都会占用更多资源,并且如果您的数据库包含大量数据,则查询会变得太慢!而且,如果你正在运行你的 查询共享服务器,这会增加性能问题!
从数据库中提取数据后,您可以轻松完成正在尝试使用regex的操作!
更新:即使您在专用服务器上运行脚本,我的建议也是一样的!但是,如果您想像所描述的那样在BOOLEAN模式中执行单词“literal”的全文搜索,则可以删除+
运算符(因为您只搜索一个单词)并将查询构造为遵循:
SELECT listOfColumsNames WHERE
MATCH (colName)
AGAINST ('literal*' IN BOOLEAN MODE);
但是,即使您添加AND运算符,您的查询也能正常工作:使用MySQL 5.1在Apache Server上进行测试!
我建议你阅读the documentation关于布尔模式下的全文搜索。
此查询的唯一问题是,如果它是另一个单词内的子字符串,则与单词“literal”不匹配,例如:“textliteraltext”。
正如您所注意到的,您不能在单词的开头使用*
运算符!
所以,要完成你想要做的事,最快最简单的方法是遵循保罗的建议,使用%
占位符:
SELECT listOfColumsNames
WHERE colName LIKE '%literal%';