简单地说,如果你坚持使用 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)来支持搜索。它甚至比全文搜索还要快,但是您当然必须保持索引更新以支持正确的搜索。