首页 文章

最简单的Solr DIH索引

提问于
浏览
1

我正在尝试使用DIH从Solr中的数据库索引数据 .

所以我修改了两个配置文件,如下所示:

solrconfig.xml

<requestHandler name="/dataimport" 
    class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
    <str name="config">data-config.xml</str>
</lst>
</requestHandler>

data-config.xml

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="****"/>
    <document>
        <entity name="source_scellee" query="select * from source_scellee">
        </entity>
    </document>
</dataConfig>

source_scellee是我的测试数据库上的表的名称 . 它包含许多字段 .

显然,我试图除了简单的测试之外别无其他 . 运行http://localhost:8983/solr/dataimport?command=full-import&clean=false&commit=true时,我得到以下 result

<str name="Full Dump Started">2012-01-27 12:27:01</str><str name="">Indexing completed. Added/Updated: 4 documents. Deleted 0 documents.</str><str name="Committed">2012-01-27 12:27:02</str>
<str name="**Total Documents Failed**">4</str>

除了服务器日志没有警告或错误 . 4是表“source_scellee”中的记录数 . 但它说所有文件都失败了 .

如果我从http://localhost:8983/solr/admin/运行查询,则根本没有显示结果!我该如何解决? (“:”表示没有结果)

谢谢您的帮助!!!

----编辑---我已将这些行添加到schema.xml中:

<field name="ID" type="int" indexed="true" stored="true" />
    <field name="reference_catalogue"  type="string" indexed="true" stored="true"/>
    <field name="reference_capsule"  type="string" indexed="true" stored="true"/>
    <field name="organisme_certificateur"  type="string" indexed="true" stored="true" />
    <field name="reference_certificat"  type="string" indexed="true" stored="true" />
    <field name="duree_d_utilisation"  type="string" indexed="true" stored="true" />
    <field name="activite_nominale"   type="string" indexed="true" stored="true"/>
    <field name="activite_minimale"   type="string" indexed="true" stored="true"/>
    <field name="activite_maximale"   type="string" indexed="true" stored="true"/>
    <field name="coffret"  type="boolean" indexed="true" stored="true"/>
    <field name="dispositif_medical"  type="boolean" indexed="true" stored="true"/>
    <field name="forme_speciale" type="boolean" indexed="true" stored="true" />
    <field name="exemption_cpa"  type="boolean" indexed="true" stored="true"/>
    <field name="marquage_ce"  type="boolean" indexed="true" stored="true"/>
    <field name="element_cible"  type="boolean" indexed="true" stored="true"/>

但结果仍然相同:查询时没有结果(我试图重新启动solr,并重新索引所有也)

------第二次编辑---我尝试过动态导入现在我的 data-config.xml 看起来像这样:

<document>
       <entity name="source_scellee" query="select * from source_scellee">
            <field column="ID" name="ID_i" />
            <field column="reference_catalogue" name="reference_catalogue_s" />
            <field column="reference_capsule" name="reference_capsule_s" />
            <field column="organisme_certificateur" name="organisme_certificateur_s" />
            <field column="reference_certificat" name="reference_certificat_s" />
            <field column="duree_d_utilisation" name="duree_d_utilisation_s" />
            <field column="activite_nominale" name="activite_nominale_s" />
            <field column="activite_minimale" name="activite_minimale_s" />
            <field column="activite_maximale" name="activite_maximale_s" />
            <field column="coffret" name="coffret_b" />
            <field column="dispositif_medical" name="dispositif_medical_b" />
            <field column="forme_speciale" name="forme_speciale_b" />
            <field column="exemption_cpa" name="exemption_cpa_b" />
            <field column="marquage_ce" name="marquage_ce_b" />
            <field column="element_cible" name="element_cible_b" />
        </entity>
    </document>

2 回答

  • 0

    1.)您可以查看统计信息页面,了解当前索引的文档数量:http://localhost:8983/solr/admin/stats.jsp

    2.)搜索结果取决于schema.xml,因为它定义了如何索引/存储文档,处理哪些字段以及如何在查询时处理搜索 . 请查看此文件或发布schema.xml中的字段定义以及表 source_scellee 中的架构/设计 . 列和字段是否具有相同的名称?

    //编辑:如果coulmname和filedname相同,这应该有效:

    <document>
           <entity name="source_scellee" 
                   pk="ID"
                   query="select * from source_scellee">
    
            </entity>
        </document>
    

    数据中的NULL值是否有问题?

    这取决于目标字段 .

    你在tomcat中运行solr还是那样?看一下Java EE Container输出,比如catalina.out左右 .

  • 1

    我很确定问题在于DIH如何映射字段 . 感谢您添加架构文件中的信息...但是,我相信您所做的是添加了需要单独添加到DIH的schema.xml和data-config.xml的配置 .

    基于Solr Wiki的Full Import Example,我会尝试以下方法 .

    schema.xml

    <field name="ID" type="int" indexed="true" stored="true" />
     <field name="reference_catalogue"  type="string" indexed="true" stored="true"/>
     <field name="reference_capsule"  type="string" indexed="true" stored="true"/>
     <field name="date_de_creation"  type="date" indexed="true" stored="true"/>
     <field name="organisme_certificateur"  type="string" indexed="true" stored="true" />
     <field name="reference_certificat"  type="string" indexed="true" stored="true" />
     <field name="duree_d_utilisation"  type="string" indexed="true" stored="true" />
     <field name="activite_nominale"   type="string" indexed="true" stored="true"/>
     <field name="activite_minimale"   type="string" indexed="true" stored="true"/>
     <field name="activite_maximale"   type="string" indexed="true" stored="true"/>
     <field name="coffret"  type="int" indexed="true" stored="true"/>
     <field name="dispositif_medical"  type="int" indexed="true" stored="true"/>
     <field name="forme_speciale" type="int" indexed="true" stored="true" />
     <field name="exemption_cpa"  type="int" indexed="true" stored="true"/>
     <field name="marquage_ce"  type="int" indexed="true" stored="true"/>
     <field name="element_cible"  type="int" indexed="true" stored="true"/>
    

    data-config.xml

    <dataConfig>
         <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="****"/>
         <document>
             <entity name="source_scellee" query="select * from source_scellee">
               <field column="ID" name="ID"/>
               <field column="reference_catalogue" name="reference_catalogue"/>
               <field column="reference_capsule" name="reference_capsule"/>
               <field column="date_de_creation" name="date_de_creation"/>
               <field column="organisme_certificateur" name="organisme_certificateur"/>
               <field column="reference_certificat" name="reference_certificat"/>
               <field column="duree_d_utilisation" name="duree_d_utilisation"/>
               <field column="activite_nominale" name="activite_nominale"/>
               <field column="activite_minimale" name="activite_minimale"/>
               <field column="activite_maximale" name="activite_maximale"/>
               <field column="coffret" name="coffret"/>
               <field column="dispositif_medical" name="dispositif_medical"/>
               <field column="forme_speciale" name="forme_speciale"/>
               <field column="exemption_cpa" name="exemption_cpa"/>
               <field column="marquage_ce" name="marquage_ce"/>
               <field column="element_cible" name="element_cible"/>
             </entity>
         </document>
     </dataConfig>
    

    有一种方法可以使用某些命名约定来设置schema.xml以动态添加它遇到的字段 . 请参阅Solr Wiki中的Dynamic Fields详细信息以获取更多详细信息以及如何执行此操作的一些示例 .

相关问题