Индексирование данных UTF8 из MySQL в SOLR 4 с использованием DataImportHandler

У меня есть установка, в которой у меня есть база данных MySQL, использующая Amazon RDS (версия 5.5.x). Я подтвердил, что БД настроена для UTF8. Я могу вставлять и выбирать китайские иероглифы с помощью PHP. Это выглядит хорошо.

У меня SOLR работает на Tomcat6 (стандартный Tomcat6 из Ubuntu 10.04LTS)

Теперь проблема заключается в подключении к нему SOLR 4.0 с использованием собственного драйвера JDBC MySQL.

Я предоставлю соответствующие конфигурации ниже, но проблема, которую я пытаюсь решить, заключается в том, что когда я индексирую свою таблицу БД в SOLR, символы ASCII в порядке (конечно), но символы Юникода, такие как китайский, отображаются как шутить Я также не могу выполнить запрос по этим символам (но запрос по английским словам работает отлично!).

Кто-нибудь сталкивался с этой проблемой?

Вот мой XML-файл db conf, который используется для DataImportHandler:

<dataConfig>
        <dataSource     type="JdbcDataSource"
                        driver="com.mysql.jdbc.Driver"
                        url="jdbc:mysql://db.host.com/db_name?useUnicode=yes&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8"
                        user="db_username"
                        password="db_password"
        />

        <document name="vspcm">
                <entity name="conversations"
                        query="select query from mysql"
                >
                </entity>
        </document>
</dataConfig>

Я поиграл с параметрами в переменной URL выше, изменив utf8 на UTF-8 и т. д. ничего не прилипает. (Я изменил запрос, чтобы удалить структуру моей таблицы, но я подтвердил, что он работает - дельта-импорт работает нормально)

Для schema.xml я начал с collection1/conf/schema.xml, удалил все ненужные поля и добавил свои. Все текстовые поля (которые являются varchars в mysql) установлены в поле text_general Пример:

<field name="msg"       type="text_general"     indexed="true"  stored="true"  multiValued="true"/>

(поле выше будет содержать символы Юникода.

Определение поля text_general:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Просто чтобы убедиться, что SOLR хорошо работает с символами Unicode, я импортировал примерную схему utf8-example.xml, которая предоставляется при загрузке SOLR 4, в «коллекцию1», и она действительно индексирует примеры символов. Я добавил немного китайского языка в XML-файл, импортировал его и запросил collection1, и я получил китайские иероглифы.

Так что я подозреваю, что это где-то в DataImportHandler.

Кто-нибудь сталкивался с этим раньше и придумал решение?

Большое спасибо! Крис


person Chris Drumgoole    schedule 20.11.2012    source источник
comment
Чтобы подтвердить настройку моей БД: выберите c.character_set_name из information_schema.tables как t, information_schema.collation_character_set_applicability как c, где c.collation_name = t.table_collation и t.table_schema = db_name и t.table_name = table_name; +--------------------+ | имя_набора_символов | +--------------------+ | utf8 | +--------------------+ 1 ряд в наборе (0,00 сек)   -  person Chris Drumgoole    schedule 20.11.2012
comment
Хм, жаль, что форматирование не сработало. Результатом стало имя набора символов таблицы utf8.   -  person Chris Drumgoole    schedule 20.11.2012


Ответы (2)


Нет сомнений в том, что Solr поддерживает китайские иероглифы.

Я думаю, вам нужно добавить такой конфиг

   <dataSource type="FileDataSource" encoding="UTF-8"/>

Дополнительные сведения см. в разделе «Устранение неполадок» вики-страницы Solr об обработчике запросов на импорт данных.

person pensz    schedule 22.11.2012

Исправлено - на самом деле это была проблема с БД.

person Chris Drumgoole    schedule 30.11.2012
comment
Добавление дополнительной информации, а не просто проблема с БД, может помочь людям в будущем. - person Gardner Bickford; 30.10.2013