2.4. 上传文件内容搜索

现在需要为每本图书出版物提供文件上传的功能,并将上传的文件添加到 BookPublication 浏览界面。

自定义 BookPublication 实体。首先,添加一个新的 file 属性,它与 FileDescriptor 实体多对一关联。FileDescriptor 是上传的文件的描述(不要与 java.io.FileDescriptor 混淆),它允许从数据模型对象中引用文件。保存更改,然后在 Studio 中将新属性附加到现有的 bookPublication.full 界面以及 BookPublication 的浏览和编辑界面。

book publication new attribute
Figure 5. BookPublication 实体的新属性

生成新的 DB 脚本,更新数据库并重新启动应用程序服务。如果重新创建了 DB,则默认情况下将禁用全文搜索。在 JMX Console 复选框中再次选中 Value ,对所有文件重建索引,处理索引队列,注销并重新登录。

就所添加的新属性而言,BookPublication 浏览界面上的出版物的表格会增加一列:File。要填写这列,请打开任意行进行编辑,使用新上传控件上传文本文件,然后单击 OK。默认情况下,CUBA 支持对 RTFTXTDOCDOCXXLSXSLXODTODSPDF 格式的文件建立索引。

book publication file is not
Figure 6. BookPublication 编辑界面

新文件会出现在表格中。可以调整新列的外观。

book publication files uploaded
Figure 7. BookPublication 浏览

打开 JMX Console 界面,打开 app-core.fts:type=FtsManager JMX bean 并依次调用 reindexAll()processQueue() 方法根据新的搜索配置来对数据库和文件中的现有实例重建索引。对所有新增和改变的数据自动建索引会有延迟,这取决于定时任务的间隔时间,即不超过 30 秒。

现在,Full text search 将输出所有记录,包括外部文件内容。

book publication fts result
Figure 8. 搜索结果

可以在 开发人员手册 的相应章节中找到有关 FileStorageAPIFileDescriptor更多信息