SOLR DIH импортирует MySQL «текстовый» столбец как BLOB - PullRequest
1 голос
/ 15 марта 2011

Я видел несколько вопросов по выбору правильного типа поля для соответствующего типа данных столбца MySQL, но моя проблема немного странная.У меня есть столбец для сообщений в MySQL типа text, я попробовал соответствующий field-type для него в Solr 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 голосов
/ 18 мая 2015

У меня была такая же проблема.Все мои конфиги и схемы были правильными, но я все еще получал капли в коротком текстовом поле.

После долгих царапин я наконец наткнулся на этот обмен: http://qnalist.com/questions/624892/solr-dih-importing-mysql-text-column-as-a-blob

ОказываетсяВ MySQL или JDBC была ошибка, из-за которой поля CHAR или VARCHAR в редких случаях отображались как BLOB.Я подозреваю, что ошибка была с MySQL, так как я работаю с довольно старой версией.

В моем случае, обходной путь должен заключаться в переносе значения в CONCAT () и переносе , что в АКТЕРЫ ().Это окончательно убедило MySQL в том, что да, мой текстовый столбец действительно является текстовым.

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

Я не знаю, нашли ли вы когда-нибудь решение вашей проблемы, но когда я столкнулся с ним, появилась эта страницачасто в моих поисках в Google, поэтому я надеюсь, что следующая бедная душа найдет этот пост полезным.

...