在mysql中的Text中找到一个单词

时间:2011-10-29 12:07:39

标签: mysql search

在发帖之前我经常搜索,但我找不到我到底要搜索的内容。问题很简单。

我在表格中有一个文本(数据库 MySql ),必须使用 InnoDB引擎(因此我无法使用需要MyIsam的FULL-TEXT search作为引擎)。我的目标是在文字中找到一个单词。正如您可以轻易猜到的那样,这个词可以被空格,制表符,标记等包围,可以在本文的开头,中间或末尾。

我知道我可以使用REGEXP运算符而且实际上我使用它但是我所做的SQL语句并不完全是我所需要的,所以我想发布这个问题。这是我的实际SQL:

SELECT *
FROM table
WHERE field REGEXP '[[:space:][:graph:]]+THEWORD[[:space:][:graph:]]+'

我如何实现目标?

感谢大家。

3 个答案:

答案 0 :(得分:2)

使用单词边界标记:

SELECT *
FROM table
WHERE field REGEXP '[[:<:]]THEWORD[[:>:]]'

(见MySQL 5.1 Reference

答案 1 :(得分:0)

您似乎正在尝试创建一种在某些文本内容中搜索单词的机制。如果您需要多次这样做(例如,在您的网站上进行每次请求搜索),我建议您索引另一个表格中的单词(例如,一个表格中的单词,其中所有单词都在是唯一的,内容和单词之间有一个连接表。)

这将显着加快旨在获取包含特定单词的内容的查询。但请记住,这是一个长期解决方案,当您想多次进行此类搜索并且每次搜索都会影响应用程序的速度时,这是一个更好的主意。

答案 2 :(得分:0)

另一种选择是在像Lucene这样的索引搜索引擎中索引数据库之外的单词。我知道这并没有直接解决你的问题,但是如果你有一个大型数据库,和/或它在高并发环境中使用,那么尝试搜索单个单词会成为一个大问题并且性能会受到影响。您可以尝试将单词索引到另一个数据库表中,但这有一些严重的限制。例如,如果您希望搜索“run”以匹配“ran”或“running”,该怎么办?如果您希望搜索“元数据”以匹配“元数据”和“元数据”,该怎么办?索引搜索引擎具有词干和同义词等功能,可以为您的搜索功能提供强大的功能和灵活性。更不用说它们已针对搜索进行了优化和缓存,而不是查询。