MySQL用$ in word搜索确切的单词

时间:2010-10-22 17:05:05

标签: mysql perl matching word

我一直在努力寻找确切的词汇,而我的研究并没有帮助我。

我发现的解决方案:

$query .= "WHERE text REGEXP '[[:<:]]($word)[[:>:]]'";
// OR
$query .= "WHERE MATCH(text) AGAINST('$word') ";

但两人都没有回复我的比赛。

我在我的数据库中搜索股票代码(例如$aapl)。如果您搜索LIKE '%$word%',则使用$bac将返回$ba

2 个答案:

答案 0 :(得分:1)

您需要使用MySql Full Text Search函数来完成上述内容。

享受!

答案 1 :(得分:0)

MATCH AGAINST并不能完全按照你的想法行事。

这可以由Casey Fulton总结为“......如果结果数量少于总表格大小的50%,则FULLTEXT仅搜索[返回]任何内容......”

相反,我正在搜索所有LIKE,然后通过REGEX过滤掉确切的单词。我这样做是为了减少REGEX的过程负荷。

以下是我的解决方案:

$likerows = "(SELECT * FROM `tweets` WHERE text LIKE '%$q%') AS likerows ";
$regexrows = "(SELECT * FROM $likerows WHERE text REGEXP('^.* $q .*$')) AS regexrows ";
$query = "SELECT * FROM $regexrows ";

我在$ q周围放置了空格,因为我想匹配一个句子结构的单词(前面跟着一个空格)。

另外,我正在搜索以$开头的“单词”。这是一个问题,这就是我为解决这个问题所做的工作:

if(substr($q, 0, 1) == '$') $q = '\\\\' . $q; // you have to escape the backslash that escapes the $ -- it's nuts.

祝你好运。