У меня есть установка, в которой у меня есть база данных 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&characterEncoding=UTF-8&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.
Кто-нибудь сталкивался с этим раньше и придумал решение?
Большое спасибо! Крис