0

我一直在努力寻找准确的词,但我的研究对我没有帮助。

我找到的解决方案:

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

但两者都没有退回我的比赛。

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

4

2 回答 2

1

您将需要使用MySql 全文搜索功能来完成上述操作。

享受!

于 2010-10-22T17:17:49.527 回答
0

MATCH AGAINST 并不完全按照您的想法工作。

这可以由 Casey Fulton 总结为“......如果结果数量小于总表大小的 50%......FULLTEXT 只搜索 [return] 任何内容......”

因此,我正在搜索所有 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.

祝你好运。

于 2010-10-23T16:32:37.177 回答