【问题标题】:Fulltext search fields and Doctrine 2全文搜索字段和 Doctrine 2
【发布时间】:2013-07-11 13:21:16
【问题描述】:

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

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

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

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

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 哇,很好的答案.. 我们会试一试! :)
    • 欢迎您 :) 文档(几乎?)不存在,但您可以使用 1.x 系列的文档。搜索组件与 ZF 1 系列中的 Zend_Search_Lucene 组件几乎 99% 相同,为您提供完成所有工作所需的帮助。
    • 自 5.6 版起 MySQL 支持全文索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多