使用postgres相似性的Cakephp搜索

时间:2017-10-23 10:03:21

标签: postgresql cakephp cakephp-3.0

我想在我的网站上构建一个搜索功能,并通过最佳匹配来搜索结果。我正在使用postgres,并希望使用similarity()来获得分数 为了获得最佳匹配,我使用regexp_matches()
现在一切都按预期工作,使用bind()来降低sql注入的风险后,我得到的结果正如我所料。

我遇到的问题是括号,因为它们不会被转义,这会导致错误。

到目前为止我的代码:

$search = 'Some Query';
$query->find('active')
        ->select([
            'Shops.id',
            'Shops.name',
            'score' => $query->newExpr()->add(
                "similarity(Shops.name, :search)"
            ),
            'regexp' => $query->newExpr()->add(
                "regexp_matches(lower(Shops.name), lower(:search))"
            ),
        ])
        ->bind(':search', $search, 'string')
        ->contain([
            'Currencies' => function (Query $q) {
                return $q->find('active');
            },
        ])
        ->order(['score' => 'DESC'])
        ->limit(ShopsTable::LIMIT_SEARCH);

有一个很好的做法可以保存查询吗?

注意:在此之前,我使用的crud查找操作会正确地转义搜索查询。

使用当前代码:
一些商店 - 工作
S'ome Shop - 工作
S“ome商店 - 工作
一些(商店 - 不工作
一些{商店 - 不工作

0 个答案:

没有答案