【问题标题】:The simplest Solr DIH indexing最简单的 Solr DIH 索引
【发布时间】:2012-02-20 10:02:01
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

    标签: solr dih


    【解决方案1】:

    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 Con​​tainer 输出,例如 catalina.out 等。

    【讨论】:

    • 看起来您正在将表列 ID 映射到 Solr 字段 ID_i,但 ID_i 没有字段定义,只有 ID。如果 RDBMS Columnnames 和 Solr-Filed-Names 相同,则不需要映射 data-config.xml 中的字段。看看我的编辑。顺便说一句:ID 是否唯一并且:如果您的重点是使用全文搜索,则不需要存储字段
    • 那么,要为我的字段动态分配字段类型,我应该在 RDBMS 中直接用 _i 或 _s 重命名我的列名吗? ID 是唯一的。
    • 好的,我离解决方案越来越近了! 5 我已经直接在 RDBMS 中重命名了我的表名(2 个字段 = id + value_s)。当我运行查询“*:*”时,我可以看到结果。但是,当我在字段 value_s 的一条记录中进行全文搜索时,我没有得到结果。
    • 这取决于您如何处理归档的值。取决于,如果您使用的是词干分析器或类似的东西。尝试更改字段类型,因为字符串不会以您喜欢的方式处理字段值。示例:“A big green car”作为字符串,您将无法通过搜索“green”找到该文档。尝试type="text" 或尝试根据值的类型、语言等创建自己的字段类型。 (wiki.apache.org/solr/AnalyzersTokenizersTokenFilters)
    • ...如果有帮助,请将答案标记为正确/正确。谢谢!
    【解决方案2】:

    我很确定问题在于 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 详细信息,了解更多详细信息以及如何完成此操作的一些示例。

    【讨论】:

    • 是的,我正在为 schema.xml 和 data-config.xml 之间的映射而苦苦挣扎......但仍然无法使其工作:SI 也尝试过上述解决方案,甚至还有试图从我的数据库中删除一些字段 =DI 将用后缀重命名我的表字段,以便能够尝试动态字段功能,我会及时通知您。谢谢
    • 如果你保持简单,只尝试从表中选择和索引前两列,ID 和参考目录,(或只是 ID 和一个简单的字符串字段)只定义那些data-config.xml 文件的两个字段?由于问题可能出在您的数据中,您可能需要使用转换器 - wiki.apache.org/solr/DataImportHandler#Transformer 来按摩进入 solr 字段的数据。
    • 数据中有 NULL 值是个问题吗?
    • 不应该,但您可能想尝试将它们排除在外,直到您可以正确索引内容,然后再将它们添加回来。
    • 一个包含两个字段且记录中没有 NULL 值的短表也无法正常工作:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多