文件系统上的全文数据库搜索和附件

时间:2014-02-07 15:16:06

标签: symfony symfony-2.1 symfony-2.3

我使用Symfony 2框架开发了一个php应用程序,现在我想在我的应用程序中实现全文搜索,它是一个遵循基于用户的acl规则的业务应用程序等等。在我的应用程序中,我创建了文档,下面是更多详细信息:

  • 我使用表单数据在我的应用程序中创建文档并上传表单中的附件

  • 当我保存文档时,表单数据保存在数据库表中,但附件保存在文件系统上(例如pdf,.doc,.xls ...),对文件的引用存储在文件系统保存在数据库记录中。

我的全文功能非常简单,当有人搜索所有我需要做的就是在表格中搜索我可以使用SQL搜索实现的数据,但我还需要搜索与文档相关的附件(表单数据) 。有人可以建议我可以使用什么来实现搜索功能,或者如果有人有经验,如果他们可以提供一些链接或样本。日Thnx。

1 个答案:

答案 0 :(得分:1)

我能够通过以下方式解决这个问题,首先在config.yml中创建一个映射,如图所示

# Elastica Configuration
fos_elastica:
    clients:
        default: { host: localhost, port: 9200 }
    indexes:
        website:
            client: default
            index_name: docova
            types:
                documents:
                    mappings:
                        Doc_Title: ~
                        Description: ~
                        Attachments:
                           type: "object"
                           properties:
                              File_Name:
                              content:
                                 type: attachment
                    persistence:
                        driver: orm
                        model: Docova\DocovaBundle\Entity\Documents
                        provider: ~
                        listener: ~
                        finder: ~

# Elastica Configuration fos_elastica: clients: default: { host: localhost, port: 9200 } indexes: website: client: default index_name: docova types: documents: mappings: Doc_Title: ~ Description: ~ Attachments: type: "object" properties: File_Name: content: type: attachment persistence: driver: orm model: Docova\DocovaBundle\Entity\Documents provider: ~ listener: ~ finder: ~

然后我需要对一个实体进行更改,将附件作为二进制内容返回弹性搜索,如下所示:

return file_get_contents($this->file_path . DIRECTORY_SEPARATOR . $this->getDocument()->getId() . DIRECTORY_SEPARATOR . md5($this->File_Name), 'r');

这解决了我。