我使用Symfony 2框架开发了一个php应用程序,现在我想在我的应用程序中实现全文搜索,它是一个遵循基于用户的acl规则的业务应用程序等等。在我的应用程序中,我创建了文档,下面是更多详细信息:
我使用表单数据在我的应用程序中创建文档并上传表单中的附件
当我保存文档时,表单数据保存在数据库表中,但附件保存在文件系统上(例如pdf,.doc,.xls ...),对文件的引用存储在文件系统保存在数据库记录中。
我的全文功能非常简单,当有人搜索所有我需要做的就是在表格中搜索我可以使用SQL搜索实现的数据,但我还需要搜索与文档相关的附件(表单数据) 。有人可以建议我可以使用什么来实现搜索功能,或者如果有人有经验,如果他们可以提供一些链接或样本。日Thnx。
答案 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');
这解决了我。