全文搜索字段和Doctrine 2

时间:2013-07-11 13:21:16

标签: mysql doctrine full-text-search zend-framework2

我们正在使用Doctrine 2并且有一些相当简单的搜索要求,我们通常会在字段上设置全文。我有一个很好的谷歌,似乎没有办法用Doctrine做到这一点。

我们在这个项目中使用Zend Framework 2,我想知道是否有人有任何好的解决方法的想法?

我不认为在查询中使用大量LIKE会产生足够快的搜索结果,但我认为同时使用像Solr或Elastic搜索这样的东西对于以简单的方式搜索一个字段来说太过分了

有什么建议吗?我觉得我们不得不一起破解一些东西。目前我们通过从命令行运行orm:schema:create工具来创建数据库。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

简单地说,如果你坚持使用Doctrine2 你不想使用LIKE查询你不想引入搜索引擎

Doctrine2依赖于InnoDB,而InnoDB(目前)不支持全文。因此,关注全文或LIKE查询是不可能的。但是,有一种比使用Solr或ElasticSearch更简单的方法,因为它们都使用Lucene作为引擎。您可以在文件系统上(在项目目录中)创建Lucene索引,并使用ZendSearch进行索引和查询。

通过composer需要zendframework/zendsearch并为您的搜索执行此操作:

use ZendSearch\Lucene\Lucene;
use ZendSearch\Lucene\Document;
use ZendSearch\Lucene\Document\Field;

// this is relative to your project say /var/www/site/data/search
$dir = 'data/search';

// Create index
Lucene::create($dir);

// Insert a new document
$index = Lucene::open($dir);
$doc   = new Document;

$doc->addField(Field::keyword('foo', 'bar'));
$index->addDocument($doc);

// Search the index
$index  = Lucene::open($dir);
$result = $index->query('foo:bar');

echo count($result);

无需在服务器上安装二进制文件(如Solr和ElasticSearch)以支持搜索。它甚至比全文搜索更快,但你必须保持你的索引up2date当然支持正确的搜索。