ddmaster/postgre-search-bundle

用于在 Doctrine 中使用全文搜索 PostgreSQL 的工具。

安装次数: 76,484

依赖者: 0

建议者: 0

安全性: 0

星标: 13

关注者: 2

分支: 34

开放问题: 0

类型:symfony-bundle

v1.0 2019-08-14 08:40 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:33:36 UTC


README

Symfony2 扩展包,提供在 Doctrine 2 中使用全文搜索 PostgreSQL 的工具 全文搜索 PostgreSQL

添加了 'tsvector' 类型,用于映射。

添加了 'to_tsquery' 和 'ts_rank' 函数,用于 DQL。

步骤 1:使用 composer 下载 PostgreSearchBundle

在 composer.json 中添加 PostgreSearchBundle

{
    "require": {
        "ddmaster/postgre-search-bundle": "dev-master"
    }
}

现在运行以下命令让 composer 下载包

$ php composer.phar update ddmaster/postgre-search-bundle

Composer 会将包安装到项目的 vendor/ddmaster/postgre-search-bundle 目录。

步骤 2:启用包

在内核中启用包

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Ddmaster\PostgreSearchBundle\PostgreSearchBundle(),
    );
}

步骤 3:配置

在 config.yml 中添加

# Doctrine Configuration
doctrine:
    dbal:
        types:
            tsvector: Ddmaster\PostgreSearchBundle\Dbal\TsvectorType
        mapping_types:
            tsvector: tsvector
    orm:
        entity_managers:
            default:
                dql:
                    string_functions:
                        TSQUERY: Ddmaster\PostgreSearchBundle\DQL\TsqueryFunction
                        TSRANK: Ddmaster\PostgreSearchBundle\DQL\TsrankFunction

步骤 4:映射示例

/**
 * @var string
 *
 * @ORM\Column(name="search_fts", type="tsvector", nullable=true)
 */
private $searchFts;

步骤 5:在 DQL 中使用

$searchQuery = 'family | history';
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT b.id, sum(TSRANK(b.searchFts, :searchQuery)) as rank 
        FROM DemoSearchBundle:Books b
        WHERE TSQUERY( b.searchFts, :searchQuery ) = true
        GROUP BY b.id
        ORDER BY rank DESC')
    ->setParameter('searchQuery', $searchQuery)
;
$result = $query->getArrayResult();

结果示例

Array
(
    [0] => Array
        (
            [id] => 2
            [rank] => 0.0607927
        )
    [1] => Array
        (
            [id] => 3
            [rank] => 0.0303964
        )
)