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>

数据配置.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我得到以下结果

<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/运行查询,则 根本不会出现任何结果!我该如何解决?(“ : ” 显示没有结果)

感谢您的帮助!!!

----edit--- 我已将这些行添加到我的 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>
4

2 回答 2

1

1.) 你可以看一下统计页面,看看现在有多少文档被索引: http://localhost:8983/solr/admin/stats.jsp

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

//编辑:这应该工作,如果 coulmname 和filedname 是相同的:

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

        </entity>
    </document>

数据中有 NULL 值是个问题吗?

这取决于目标字段。

你的 solr 是在 tomcat 还是类似的东西上运行?查看 Java EE Con​​tainer 输出,例如 catalina.out 左右。

于 2012-01-27T12:06:57.160 回答
0

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

基于 Solr Wiki 中的完整导入示例,我将尝试以下操作。

架构.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"/>

数据配置.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 中的动态字段详细信息以获取更多详细信息以及如何完成此操作的一些示例。

于 2012-01-27T14:13:13.393 回答