Solr:用于多语言索引的DIH&多值字段?

时间:2010-11-13 20:51:34

标签: solr multilingual dataimporthandler

我有一个MySQL表:

CREATE TABLE documents (
    id INT NOT NULL AUTO_INCREMENT,
    language_code CHAR(2),
    tags CHAR(30),
    text TEXT,
    PRIMARY KEY (id)
);

我有2个关于Solr DIH的问题:

1)langauge_code字段表示text字段所使用的语言。根据语言,我想将text索引到不同的Solr字段。

# pseudo code

if langauge_code == "en":
    index "text" to Solr field "text_en"
elif langauge_code == "fr":
    index "text" to Solr field "text_fr"
elif langauge_code == "zh":
    index "text" to Solr field "text_zh"
...

DIH可以处理这样的用例吗?如何配置它?

2)tags字段需要索引到Solr multiValued字段中。多个值存储在字符串中,以逗号分隔。例如,如果tags包含字符串"blue, green, yellow",那么我想将3个值"blue""green""yellow"索引到Solr multiValued字段中。

我如何用DIH做到这一点?

感谢。

2 个答案:

答案 0 :(得分:5)

首先,您的架构需要允许它具有以下内容:

<dynamicField name="text_*" type="string" indexed="true" stored="true" />

然后在你的DIH配置中这样:

<entity name="document" dataSource="ds1" transformer="script:ftextLang" query="SELECT * FROM documents" />

在数据源正下方定义脚本:

<script><![CDATA[
  function ftextLang(row){
     var name = row.get('language_code');
     var value = row.get('text');
     row.put('text_'+name, value); return row;
  }
]]></script>

答案 1 :(得分:2)

对不起,我对你的DIH问题没有直接的答案,虽然知道它会很有趣。

我确实注意到了您的2个字母的语言代码并建议使用5个字母的插槽。有些语言的方言差异非常微不足道。例如,简体中文与繁体中文。对于形态分析,SmartCN滤波器可以处理zh-cn,但不能处理zh-tw等。

葡萄牙语和西班牙语也是我们被警告不要将所有方言混合在一起的语言,尽管差异不那么大,而且两者仍然是可搜索的。

当然你可能已经知道了这一点,并且没有将它添加到问题中以保持简单。这只是一个非常新鲜的主题。