如何使用 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 骨架教程。祝你好运。希望这有帮助。

Indexing a file system and database using SolrJ