gemorroj/sphinx-bundle

Sphinx 在 Symfony 中的搜索

安装: 19

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 3

类型:symfony-bundle

2.0.1 2014-03-10 17:22 UTC

This package is auto-updated.

Last update: 2024-09-08 22:13:42 UTC


README

此包使用 Sphinx PHP API,您需要在 dir/sphinxapi.php 中包含您的 SphinxAPI 版本,该版本可在 http://sphinxsearch.com/downloads/ 上找到。

安装

  • 添加到 composer.json
{
    "require": {
        "gemorroj/sphinx-bundle": "dev-master"
    }
}

要求

  • PHP >= 5.5.9
  • Symfony >= 3.0

简单示例

<?php
$client = $this->get('highco.sphinx.client');

$bridge = $this->get('highco.sphinx.pager.white_october.doctrine_orm');
// $bridge->setEntityManagerByName('my_custom_em');
// $bridge->setEntityManager($em);
$bridge->setRepositoryClass('HighcoUserBundle:User');
$bridge->setPkColumn('id');
$bridge->setSphinxResults($client->Query('Stéphane'));

$pager = $bridge->getPager();

分页示例

<?php
$itemsPerPage = 50;
$page = 1;

$client = $this->get('highco.sphinx.client');
$client->SetLimits( ($page -1) * $itemsPerPage, $itemsPerPage);

$bridge = $this->get('highco.sphinx.pager.white_october.doctrine_orm');
$bridge->setRepositoryClass('HighcoUserBundle:User');
$bridge->setPkColumn('id');
$bridge->setSphinxResults($client->Query('Stéphane'));

$pager = $bridge->getPager();
$pager->setMaxPerPage($itemsPerPage);
$pager->setCurrentPage($page);

分页示例(多个查询)

<?php
$itemsPerPage = 50;
$page = 1;

$client = $this->get('highco.sphinx.client');
$client->SetLimits( ($page -1) * $itemsPerPage, $itemsPerPage);

$bridge = $this->get('highco.sphinx.pager.white_october.doctrine_orm');
$bridge->setRepositoryClass('HighcoUserBundle:User');
$bridge->setPkColumn('id');

$client->AddQuery('Stéphane', 'address_book');
$client->AddQuery('Nikola', 'address_book');
$bridge->setSphinxResults($client->RunQueries(), true);

$pager = $bridge->getPager();
$pager->setMaxPerPage($itemsPerPage);
$pager->setCurrentPage($page);

分页示例/具有区分符属性的

<?php
$itemsPerPage = 50;
$page = 1;

$client = $this->get('highco.sphinx.client');
$client->SetLimits( ($page -1) * $itemsPerPage, $itemsPerPage);

$bridge = $this->get('highco.sphinx.pager.white_october.doctrine_orm');

/**
 * Make sure you have this column defined as attribute in Sphinx (i.e: sql_attr_string = type).
 * Sphinx prior version 1.10 does not have support for sql_attr_string, but you can use sql_attr_uint
 * and have your discriminators defined as constants in PHP.
 */
$bridge->setDiscriminatorColumn('type');

$bridge->setDiscriminatorRepositories(array(
    'article'       => array(
        'class' => 'BlogBundle:Article',
        'em'    => 'default',
    ),
    'category'      => array(
        'class' => 'BlogBundle:Category',
        'em'    => 'default',
    ),
    'note'         => array(
        'class' => 'NotesBundle:Message',
        'em'    => 'notes'
    ),
));

$bridge->setPkColumn('id');
$bridge->setSphinxResults($client->Query('Stéphane'));

$pager = $bridge->getPager();
$pager->setMaxPerPage($itemsPerPage);
$pager->setCurrentPage($page);

待办事项

  • 注意编码规范,例如 I... 应该是 ...Interface,行应换行等...

  • 允许用户在 config.yml 中修改客户端选项

  • 创建默认分页器

  • 寻找 doctrine FIELD 扩展,以便能够在 PagerFanta 中传递 DoctrineORMAdapter!

愿望清单

  • 提供其他分页器桥接