全文搜索字段和Doctrine 2

4
我们正在使用Doctrine 2,在一些相当简单的搜索需求中,我们通常会在字段上设置fulltext。我已经好好地搜索了一下,似乎没有办法在Doctrine中实现这个功能。
我们正在为这个项目使用Zend Framework 2,我想知道是否有任何好的解决方法?
我不认为在查询中使用很多LIKE能够产生足够快速的搜索结果,但同时我认为使用像Solr或Elasticsearch这样的工具对一个简单的字段进行搜索会过于繁琐。
有什么建议吗?我感觉我们将不得不把一些东西拼凑在一起。目前我们是通过命令行运行orm:schema:create工具来创建数据库的。
有什么建议吗?
1个回答

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)来支持搜索。使用这种方法比全文搜索更快,但是您必须及时更新索引以实现正确的搜索。


哇,太棒了,我们会尝试一下的! :) - John Hunt
不客气 :) 文档几乎不存在,但您可以使用1.x系列的文档。搜索组件与ZF 1系列的Zend_Search_Lucene组件几乎相同,为您提供所需的帮助以完成所有任务。 - Jurian Sluiman
2
自MySQL 5.6版本起,全文索引现已得到支持。 - Hubert Perron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接