我有一个使用 Amazon 的 RDS(版本 5.5.x)的 MySQL 数据库的设置。我已经确认数据库配置为 UTF8。我可以使用 PHP 插入和选择中文字符。看起来不错。
我在 Tomcat6 上运行 SOLR(来自 Ubuntu 10.04LTS 的库存 Tomcat6)
现在的问题是使用 MySQL 自己的 JDBC 驱动程序将 SOLR 4.0 插入其中。
我将在下面提供相关配置,但我要解决的问题是,一旦我将我的 DB 表索引到 SOLR 中,ASCII 字符就可以了(当然),但是 unicode 字符(例如中文)显示为胡说八道。我也无法查询这些字符(但查询英文单词效果很好!)。
有没有人遇到过这个问题?
这是用于 DataImportHandler 的我的 db conf xml 文件:
<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 开始,删除了所有不必要的字段,并添加了自己的字段。所有文本字段(在 mysql 中是 varchars)都设置为 text_general 示例字段:
<field name="msg" type="text_general" indexed="true" stored="true" multiValued="true"/>
(上面的字段中将包含 unicode 字符。
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 字符配合得很好,我将 SOLR 4 下载中提供的示例 utf8-example.xml 模式导入到“collection1”中,它确实 idex 示例字符。我在xml文件中添加了一些中文,导入它,然后对collection1进行查询,我得到了中文字符。
所以我怀疑它在 DataImportHandler 的某个地方。
有没有人遇到过这种情况并提出解决方案?
非常感谢!克里斯