如何使用 Solr 5.1.0 在数据库中使用元数据索引文档
How to index documents with their metadata in a DB using Solr 5.1.0
我正在使用 Apache Solr 为搜索引擎编制文档索引。这些文档本地存储在我的文件系统中。为了进行分面搜索,我还必须包括存储在 MySQL 数据库中的这些文档元数据。
有没有办法同时在文件系统中索引这些文档,同时attaching/indexing 数据库中它们相应的元数据用于分面搜索?
如果不能,还有什么选择?提前致谢
我并不是说德鲁的回答不正确,但我发现有更直接的方法可以解决这个问题。
经过几天的搜索并在 Lucene 论坛上发帖后,我得出了一个非常全面的答案来解决这个问题。如果你想索引一个数据库和一个文件系统,并让它们提交一份关于文件及其元数据的综合文档,有两种方法可以实现。一个比另一个好。
第一种方法是配置 DataImportHandler 或 DIH。这涉及更改 solrconfig.xml 以启用 DIH,然后您需要在您正在使用的核心的 conf 目录中创建一个新的 .xml 文件。这使您能够
1) 利用多个数据源
2)使用数据库中的数据在文件系统中查找文件。 IE 在这种情况下是文件路径。
本文link将帮助您配置多个数据源并了解 DIH 的功能
Data Import Handler Documentation
此 link 将帮助您设置 DIH 并将其连接到数据库。我建议同时查看两个部分。
Configuring the data import handler and connecting it to a database
这是我最终的 DIH 配置文件,供参考
<dataConfig>
<dataSource name="ds-db" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/EDMS_Metadata"
user="root"
password="*************" />
<dataSource name="ds-file" type="BinFileDataSource"/>
<document name="doc1">
<entity name="db-data"
dataSource="ds-db"
onError="skip"
query="select TextContentURL as 'id', Title, AuthorCreator from MasterIndex" >
<field column="TextContentURL" name="id" />
<field column="Title" name="title" />
<field column="AuthorCreator" name="author" />
<entity name="file"
dataSource="ds-file"
onError="skip"
processor="TikaEntityProcessor"
url="${db-data.id}"
format="text">
<field column="text" name="text" />
</entity>
</entity>
</document>
</dataConfig>
警告大 PDF 这会使 Solr 变慢并最终可能会杀死它。这是因为您正在 Solr 中处理文档并且它杀死了 Tika 。这就是为什么我最终无法使用这种方法的原因,这让我想到了我推荐给那些索引丰富文档的下一个方法。
您必须创建自己的索引器。我使用了一种叫做 SolrJ 的东西。它是一个 Java API 让您可以访问 Solr。进入细节会花费太长时间,但这里有一个 link 到 SolrJ 的骨架,用于单独索引文件系统和数据库。我能够将它们结合起来创建一个单一的 Solr 文档,其中包含数据库中的元数据集和文件系统中的文件。我更喜欢这个,因为它处理得很快,让我对我的领域有更多的控制权。
这里是 link 骨架教程。祝你好运。希望这有帮助。
我正在使用 Apache Solr 为搜索引擎编制文档索引。这些文档本地存储在我的文件系统中。为了进行分面搜索,我还必须包括存储在 MySQL 数据库中的这些文档元数据。
有没有办法同时在文件系统中索引这些文档,同时attaching/indexing 数据库中它们相应的元数据用于分面搜索?
如果不能,还有什么选择?提前致谢
我并不是说德鲁的回答不正确,但我发现有更直接的方法可以解决这个问题。
经过几天的搜索并在 Lucene 论坛上发帖后,我得出了一个非常全面的答案来解决这个问题。如果你想索引一个数据库和一个文件系统,并让它们提交一份关于文件及其元数据的综合文档,有两种方法可以实现。一个比另一个好。
第一种方法是配置 DataImportHandler 或 DIH。这涉及更改 solrconfig.xml 以启用 DIH,然后您需要在您正在使用的核心的 conf 目录中创建一个新的 .xml 文件。这使您能够
1) 利用多个数据源 2)使用数据库中的数据在文件系统中查找文件。 IE 在这种情况下是文件路径。
本文link将帮助您配置多个数据源并了解 DIH 的功能
Data Import Handler Documentation
此 link 将帮助您设置 DIH 并将其连接到数据库。我建议同时查看两个部分。
Configuring the data import handler and connecting it to a database
这是我最终的 DIH 配置文件,供参考
<dataConfig>
<dataSource name="ds-db" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/EDMS_Metadata"
user="root"
password="*************" />
<dataSource name="ds-file" type="BinFileDataSource"/>
<document name="doc1">
<entity name="db-data"
dataSource="ds-db"
onError="skip"
query="select TextContentURL as 'id', Title, AuthorCreator from MasterIndex" >
<field column="TextContentURL" name="id" />
<field column="Title" name="title" />
<field column="AuthorCreator" name="author" />
<entity name="file"
dataSource="ds-file"
onError="skip"
processor="TikaEntityProcessor"
url="${db-data.id}"
format="text">
<field column="text" name="text" />
</entity>
</entity>
</document>
</dataConfig>
警告大 PDF 这会使 Solr 变慢并最终可能会杀死它。这是因为您正在 Solr 中处理文档并且它杀死了 Tika 。这就是为什么我最终无法使用这种方法的原因,这让我想到了我推荐给那些索引丰富文档的下一个方法。
您必须创建自己的索引器。我使用了一种叫做 SolrJ 的东西。它是一个 Java API 让您可以访问 Solr。进入细节会花费太长时间,但这里有一个 link 到 SolrJ 的骨架,用于单独索引文件系统和数据库。我能够将它们结合起来创建一个单一的 Solr 文档,其中包含数据库中的元数据集和文件系统中的文件。我更喜欢这个,因为它处理得很快,让我对我的领域有更多的控制权。
这里是 link 骨架教程。祝你好运。希望这有帮助。