在 mysql bool 匹配中,如果不存在运算符,则隐含 OR。如果您想要 AND,则需要为每个关键字添加 +。
因此查询“word1 word2”等于“word1 OR word2”,“+word1 +word2”等于“word1 AND word2”
我不希望用户必须在每个关键字前输入 +,我有什么选择?
建议选项 1:my.conf 中是否有某些内容我可以更改以设置默认值(我没有找到任何内容)
建议选项 2:解析查询并手动向每个单词添加 +。您可以分享任何简单的代码吗?
问题是,如果用户添加“引号”或运算符(+-*<>)等,它会破坏我的解析代码。
最佳答案
我在我的网站上提出了第二个建议。
如果您只处理单词(不处理带引号的字符串),则在每个单词之前添加 + 是一个简单的衬里
$q = implode(' ', array_map(create_function('$a', 'return "+".$a;'), preg_split('`\\s+`', $q))))
或者更简单的正则表达式替换做同样的事情:
echo preg_replace('`(\\W|^)\\w`', '\\1+\\2', $q);
如果您不仅要搜索单个单词,还需要搜索带引号的短语,则应在每个未带引号的单词和每个带引号的字符串之前添加 +
echo preg_replace('`(\\s|^)(\\w|"[^"]+")`', '\\1+\\2', $q);
关于php - 在mysql bool 匹配中强制使用 "implied AND"而不是 "implied OR"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1807414/