1つの方法は、述語式でMySQLREGEXP呼び出しを使用することです。
$select
の場所 Zend\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
をいじくり回すのをやめるのに時間がかかりすぎました 私の正規表現で。これにより、誰かが時間を節約できることを願っています。