繁体   English   中英

使用DataImportHandler将MySQL的UTF8数据索引到SOLR 4中

[英]Indexing UTF8 Data from MySQL into SOLR 4 using DataImportHandler

我有一个设置,我有一个MySQL数据库使用亚马逊的RDS(版本5.5.x)。 我已确认DB配置为UTF8。 我可以使用PHP插入和选择中文字符。 看起来很好。

我在Tomcat6上运行SOLR(来自Ubuntu 10.04LTS的Tomcat6库存)

现在的问题是使用MySQL自己的JDBC驱动程序将SOLR 4.0插入其中。

我将在下面提供相关的配置,但我试图解决的问题是,一旦我将我的数据库表索引到SOLR中,ASCII字符很好(当然),但unicode字符,如中文,显示为jiberish。 我也无法查询这些字符(但查询英文单词效果很好!)。

有没有人遇到过这个问题?

这是我用于DataImportHandler的db conf xml文件:

<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等等。没有什么可说的。 (我已经更改了查询以删除我的表结构,但我确认它有效 - delta导入工作正常)

对于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”中,它确实是示例字符。 我在xml文件中添加了一些中文,导入它,并查询了collection1,我得到了中文字符。

所以我怀疑它在DataImportHandler中的某个地方。

有没有人遇到过这个并提出解决方案?

非常感谢! 克里斯

毫无疑问,Solr支持汉字。

我想你需要添加这样的配置

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

有关详细信息,请参阅Solr wiki中有关数据导入请求处理程序的 “故障排除”部分。

修复它 - 实际上是数据库问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM