在单词中搜索文字

时间:2009-12-07 08:12:42

标签: sql mysql

有没有办法执行FULLTEXT搜索,返回在单词中找到的文字?

我一直在使用MATCH(col) AGAINST('+literal*' IN BOOLEAN MODE),但如果文字如下,则会失败:

  • blah,blah,literal,blah
  • blahliteralblah
  • blah,blah,literal

请注意逗号后面没有空格。

我希望返回上述所有三种情况。

1 个答案:

答案 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%';