代码之家  ›  专栏  ›  技术社区  ›  DP2

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

  •  0
  • DP2  · 技术社区  · 11 年前

    我已经使用Symfony 2框架开发了一个php应用程序,现在我想在我的应用程序中实现全文搜索,这是一个遵循基于用户的acl规则的业务应用程序,等等

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

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

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

    1 回复  |  直到 11 年前
        1
  •  1
  •   DP2    11 年前

    我能够通过以下方式解决这个问题,首先在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: ~
    

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

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

    这为我解决了问题。