我们正在使用Doctrine 2并且有一些相当简单的搜索要求,我们通常会在字段上设置全文。我有一个很好的谷歌,似乎没有办法用Doctrine做到这一点。
我们在这个项目中使用Zend Framework 2,我想知道是否有人有任何好的解决方法的想法?
我不认为在查询中使用大量LIKE会产生足够快的搜索结果,但我认为同时使用像Solr或Elastic搜索这样的东西对于以简单的方式搜索一个字段来说太过分了
有什么建议吗?我觉得我们不得不一起破解一些东西。目前我们通过从命令行运行orm:schema:create工具来创建数据库。
有什么建议吗?
答案 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当然支持正确的搜索。