php - ZF2 - 用于全词搜索的 MySQL 正则表达式

标签 php mysql regex zend-framework2

给定:您在 ZF2 模型中有一个正常运行的子串搜索。您如何将其转变为全词搜索?

最佳答案

一种方法是在谓词表达式中使用 MySQL REGEXP 调用。

$selectZend\Db\Sql\Select 的实例,$searchFor 是您的搜索词:

原始子字符串搜索可能使用这样的位置...

$select->where(array(
    new Predicate\PredicateSet(
        array(
            new Zend\Db\Sql\Predicate\Like('tag', '%' . $searchFor . '%'),
            new Zend\Db\Sql\Predicate\Like('title', '%' . $searchFor . '%'),
        ),
        Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR
    ),
));

...上面的全词版本是:

$select->where(array(
    new Predicate\PredicateSet(
        array(
            new Zend\Db\Sql\Predicate\Expression("tag REGEXP '([[:<:]]" . $searchFor ."[[:>:]])'"),
            new Zend\Db\Sql\Predicate\Expression("title REGEXP '([[:<:]]" . $searchFor ."[[:>:]])'"),
        ),
        Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR
    ),
));

注意这些是多字段搜索,所以我做了一个 PredicateSet::COMBINED_BY_OR。我花了很长时间才停止在我的正则表达式中使用 \b 。希望这可以节省一些时间。

关于php - ZF2 - 用于全词搜索的 MySQL 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27709016/

相关文章:

ruby - 仅使用起始标记捕获文本并且起始标记在一行中出现多次

PHP 产生不正确的算术结果

PHP:获取子节点= 'value'的父节点

php - 什么是队列访问并发解决方案?

python - 进行此搜索的最有效方法是什么(mysql 或文本)?

regex - 使用 gsub 创建统一的时间格式

php - Symfony2 : disable Twig cache

php - insideHTML 在 else 条件下不改变

sql - 加入mysql5

MySQL:对多个内部联接表使用 Case When Then End