我正在使用Apache Solr为搜索引擎的文档编制索引。这些文档存储在本地文件系统中。为了进行分面搜索,我还必须包含这些文档元数据,这些元数据存储在MySQL数据库中。
是否有一种方法同时在文件系统中索引这些文档,同时也从分页搜索中从DB附加/索引它们的对应元数据?
如果不是,还有什么选择?提前谢谢
最佳答案
我不是说德鲁的答案是错误的,但我发现有一个更直接的方法来解决这个问题。
经过几天的搜索和在Lucene论坛上的发布,我终于找到了这个问题的一个相当全面的答案。如果要为数据库和文件系统编制索引,并让它们为文件及其元数据提交一份全面的文档,有两种方法可以实现。一个比另一个好。
第一种方法是配置DataImportHandler或DIH。这涉及到更改solrconfig.xml以启用DIH,然后需要在正在使用的核心的conf目录中创建一个新的.xml文件。这使您能够
1)利用多个数据源
2)使用数据库中的数据在文件系统中查找文件。即在本例中是文件路径。
此链接将帮助您配置多个数据源并了解DIH的功能
Data Import Handler Documentation
此链接将帮助您设置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。这就是我最终不能使用这个方法的原因,这是我推荐给索引丰富文档的下一个方法。
你必须创建自己的索引器。我用了一种叫索尔的东西。它是一个Java API,允许您访问Solr。进入细节将花费太长时间,但这里是一个链接到SoRJ的骨架,用来分别索引文件系统和数据库。我能够将它们结合起来,创建一个Solr文档,其中包含数据库中的一组元数据和文件系统中的文件。我更喜欢这个,因为它处理速度快,让我对我的领域有更多的控制。
这是一个链接到骨架教程。祝你好运。希望这有帮助。
Indexing a file system and database using SolrJ
关于mysql - 如何使用Solr 5.1.0在数据库中为文档及其元数据编制索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30761628/