SOLR DIH将MySQL“text”列导入为BLOB

时间:2011-03-15 15:13:02

标签: mysql solr dih

我在这里看到几个关于为相应的MySQL列数据类型选择正确的字段类型的问题,但我的问题有点奇怪。我在text类型的MySQL中发布了一个专栏,我在Solr field-type中尝试了相应的schema.xml,例如string, text, text-ws。但每当我使用DIH导入它时,它都会被导入为BLOB对象。我检查过,这个事情只发生在text类型的列而不是varchar的列中(它们被索引为字符串)。因此,帖子字段不会变得可搜索。

在重复搜索失败后,当我在Solr上进行*:*查询搜索时,我发现了这个问题。样品回复:

    <result name="response" numFound="223" start="0" maxScore="1.0">
    <doc>
    <float name="score">1.0</float>
    <str name="solr_post_bio">[B@10a33ce2</str>
    <date name="solr_post_created_at">2011-02-21T07:02:55Z</date>
    <str name="solr_post_email">test.account@gmail.com</str>
    <str name="solr_post_first_name">Test</str>
    <str name="solr_post_last_name">Account</str>
    <str name="solr_post_message">[B@2c93c4f1</str>
    <str name="solr_post_status_message_id">1</str>
    </doc>

编辑:

为不提供以下详细信息而道歉。

data-config.xml

    <document>
    <entity name="posts" dataSource="jdbc"  query="select 
        p.person_id as solr_post_person_id,
        pr.first_name as solr_post_first_name,
        pr.last_name as solr_post_last_name,
        u.email as solr_post_email,
        p.message as solr_post_message,
        p.id as solr_post_status_message_id,
        p.created_at as solr_post_created_at,
        pr.bio as solr_post_bio
        from posts p,users u,profiles pr where p.person_id = u.id and p.person_id = pr.person_id and p.type='StatusMessage'">               
            <field column="solr_post_person_id" />
        <field column="solr_post_first_name"/>
        <field column="solr_post_last_name" />
        <field column="solr_post_email" />
        <field column="solr_post_message" />
        <field column="solr_post_status_message_id" />
        <field column="solr_post_created_at" />
        <field column="solr_post_bio"/>
       </entity>
  </document>

schema.xml

<fields>
    <field name="solr_post_status_message_id" type="string" indexed="true" stored="true" required="true" />
    <field name="solr_post_message" type="text_ws" indexed="true" stored="true" required="true" />  
    <field name="solr_post_bio" type="text" indexed="false" stored="true" />
    <field name="solr_post_first_name" type="string" indexed="false" stored="true" />
    <field name="solr_post_last_name" type="string" indexed="false" stored="true" />
    <field name="solr_post_email" type="string" indexed="false" stored="true" />
    <field name="solr_post_created_at" type="date" indexed="false" stored="true" />
</fields>
<uniqueKey>solr_post_status_message_id</uniqueKey>
<defaultSearchField>solr_post_message</defaultSearchField>

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我的所有配置和模式都是正确的,但我仍然在短文本字段中获得blob。

经过多次头疼,我终于偶然发现了这次交流:http://qnalist.com/questions/624892/solr-dih-importing-mysql-text-column-as-a-blob

事实证明,在MySQL或JDBC中存在一个错误,导致CHAR或VARCHAR字段在极少数情况下显示为BLOB而不是。我怀疑这个错误是在MySQL,因为我正在使用相当旧的版本。

在我的情况下,解决方法是将值包装在CONCAT()中,并将包含在CAST()中。这最终使MySQL确信是的,我的文本专栏确实是文本。

CAST(CONCAT('',your_column) AS CHAR(20))

我不知道你是否找到了解决问题的方法,但是当我遇到它时,这个页面经常出现在我的谷歌搜索中,所以我希望下一个可怜的灵魂发现这篇文章很有帮助。