【发布时间】:2015-11-16 01:06:26
【问题描述】:
我只是在 MySQL 中学习 MATCH .. AGAINST 并打算使用它,因为我了解了它的基础知识。我遇到了我们的一些遗留代码,并希望得到一些反馈。这里是:
foreach( $validSearchWords as $word ) { //this is a cleaned array of the user query phrase
$mycount++;
// uses a special character
if (strpos($word,"'")) {
$wordCriteria['keyword'] .= '"'.$word.'"'; //really? can't be right!
// if only one search term
} elseif ($vcount == $mycount) {
$wordCriteria['keyword'] .= $word.'*';
// if term is second or higher
} else {
$wordCriteria['keyword'] .= $word.'* ';
}
}
我了解这里的尝试,但我怀疑第一个逻辑块不正确。
Texas State University 将变为:Texas* State* University*
但是
John O'Malley High School 会变成 `John* "O'Malley"High* School*
这不可能,我认为程序员只是他们的操作不正确,因为:
a) O'Malley 后面没有空格
b) 他们失去了一个单词的通配符,只是因为它有一个看起来很奇怪的单引号。如果他们真的想要外卡,那应该是这样吧?
John* O'Malley* High* School*
更新 更简洁的问题是,“你如何用单引号表示单词,比如用通配符的 O'Malley?
这个:
SET @keyword='O\'malley*';
SELECT * FROM all_schools WHERE match (school_name) against (@keyword IN BOOLEAN MODE);
只给我Malley 的结果,这是我不想要的。我想要O'Malley 和O'Malleygough(如果存在)
【问题讨论】:
-
我在您的问题或代码 sn-p 的任何地方都没有看到 SQL 查询。
-
同意,我添加了一个来澄清。真正的问题是,“你如何对
O'Malley*进行布尔模式搜索,它不仅匹配 Malley,而且匹配 O'Malley 和 O'Malleygough?
标签: mysql search full-text-search