4

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

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

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

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

有什么建议么?

4

1 回答 1

3

简单地说,如果你坚持使用 Doctrine2并且不想使用 LIKE 查询并且不想引入搜索引擎,则没有解决方案。

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

通过作曲家要求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)来支持搜索。它甚至比全文搜索还要快,但是您当然必须保持索引更新以支持正确的搜索。

于 2013-07-11T20:05:24.387 回答