Apache Solr - 索引 ZIP 文件
Apache Solr - Indexing ZIP files
我的网络应用程序是一个电子邮件服务。它将电子邮件存储在 MySQL 数据库中,电子邮件附件在磁盘上。
数据库类似于:
----------------------------------------------------------------------
| id | sender | receiver | subject | body | attach_dir | attachments |
----------------------------------------------------------------------
| 2 | 444 | 555 | Apples | Hey! | /mnt/emails| att1.doc\r\n|
| | | | | | | att2.doc\r\n|
----------------------------------------------------------------------
| 3 | 77 | 22 | Pears | Hola!| /mnt/emails| att1.zip\r\n|
----------------------------------------------------------------------
我用下面的数据索引它-config.xml:
<dataConfig>
<dataSource name="mysql"
type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/email?
useUnicode=true&
characterEncoding=UTF-8&
useTimezone=true&
serverTimezone=UTC"
user="user"
password="pass"/>
<dataSource name="files"
type="BinFileDataSource" />
<document>
<entity name="email" dataSource="mysql"
query="SELECT id, subject, body, date, attach, attach_dir FROM email"
transformer="RegexTransformer"
>
<field column="id" name="id"/>
<field column="subject" name="subject"/>
<field column="body" name="content"/>
<field column="date" name="last_modified"/>
<field column="attach" name="attach" splitBy="\r\n" />
<field column="attach_dir" name="attach_dir"/>
<entity name="attach_glob" dataSource="null"
processor="FileListEntityProcessor"
baseDir="/mnt/attach/${email.attach_dir}" fileName=".*"
recursive="false" onError="skip">
<entity name="email_attachment" dataSource="files"
processor="TikaEntityProcessor"
url="${attach_glob.fileAbsolutePath}">
<field column="text" name="attach_content"/>
</entity>
</entity>
</entity>
</document>
</dataConfig>
这适用于除 .zip
等压缩文件之外的所有文件。对于 .zip
文件,attach_content
字段仅填充 zip 存档中的文件名,而不是从 zip 存档中提取的文件的内容。
但是,如果我这样使用 SimplePostTool
:
/opt/solr/bin/post -c mycollection /mnt/attach/message3/att1.zip
然后我从 zip 存档中的所有文件中提取了所有内容,这就是我需要的。但是我需要这个内容成为数据导入处理程序添加的文档的一部分,上面有数据-config.xml。
这可能吗?
您需要在 TikaEntityProcessor 配置上将 extractEmbedded 设置为 true 以便它在 Apache Tika 中设置适当的解析器 ParseContext 用于解析嵌入文档。
例如,您可以将问题中的配置更改为如下设置:
<entity name="email_attachment" dataSource="files"
processor="TikaEntityProcessor"
url="${attach_glob.fileAbsolutePath}" extractEmbedded="true">
<field column="text" name="attach_content"/>
</entity>
有关详细信息,请参阅 here。
我的网络应用程序是一个电子邮件服务。它将电子邮件存储在 MySQL 数据库中,电子邮件附件在磁盘上。
数据库类似于:
----------------------------------------------------------------------
| id | sender | receiver | subject | body | attach_dir | attachments |
----------------------------------------------------------------------
| 2 | 444 | 555 | Apples | Hey! | /mnt/emails| att1.doc\r\n|
| | | | | | | att2.doc\r\n|
----------------------------------------------------------------------
| 3 | 77 | 22 | Pears | Hola!| /mnt/emails| att1.zip\r\n|
----------------------------------------------------------------------
我用下面的数据索引它-config.xml:
<dataConfig>
<dataSource name="mysql"
type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/email?
useUnicode=true&
characterEncoding=UTF-8&
useTimezone=true&
serverTimezone=UTC"
user="user"
password="pass"/>
<dataSource name="files"
type="BinFileDataSource" />
<document>
<entity name="email" dataSource="mysql"
query="SELECT id, subject, body, date, attach, attach_dir FROM email"
transformer="RegexTransformer"
>
<field column="id" name="id"/>
<field column="subject" name="subject"/>
<field column="body" name="content"/>
<field column="date" name="last_modified"/>
<field column="attach" name="attach" splitBy="\r\n" />
<field column="attach_dir" name="attach_dir"/>
<entity name="attach_glob" dataSource="null"
processor="FileListEntityProcessor"
baseDir="/mnt/attach/${email.attach_dir}" fileName=".*"
recursive="false" onError="skip">
<entity name="email_attachment" dataSource="files"
processor="TikaEntityProcessor"
url="${attach_glob.fileAbsolutePath}">
<field column="text" name="attach_content"/>
</entity>
</entity>
</entity>
</document>
</dataConfig>
这适用于除 .zip
等压缩文件之外的所有文件。对于 .zip
文件,attach_content
字段仅填充 zip 存档中的文件名,而不是从 zip 存档中提取的文件的内容。
但是,如果我这样使用 SimplePostTool
:
/opt/solr/bin/post -c mycollection /mnt/attach/message3/att1.zip
然后我从 zip 存档中的所有文件中提取了所有内容,这就是我需要的。但是我需要这个内容成为数据导入处理程序添加的文档的一部分,上面有数据-config.xml。
这可能吗?
您需要在 TikaEntityProcessor 配置上将 extractEmbedded 设置为 true 以便它在 Apache Tika 中设置适当的解析器 ParseContext 用于解析嵌入文档。
例如,您可以将问题中的配置更改为如下设置:
<entity name="email_attachment" dataSource="files"
processor="TikaEntityProcessor"
url="${attach_glob.fileAbsolutePath}" extractEmbedded="true">
<field column="text" name="attach_content"/>
</entity>
有关详细信息,请参阅 here。