2010-11-13 83 views
2

我有一个MySQL表:Solr:多语言索引和多值字段的DIH?

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

我对Solr的DIH 2个问题:

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?

谢谢。

回答

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> 
2

对不起,我没有关于DIH问题的直接答案,尽管知道这很有趣。

我没有注意到你的2字母语言代码,并建议5个字母的插槽。有些语言有不同的方言差异。例如,简体中文与繁体中文。对于形态分析,SmartCN过滤器可以处理zh-cn,但不能处理zh-tw等。

葡萄牙语和西班牙语也是语言,我们已经警告不要将所有方言混合在一起,尽管差异不太剧烈,并且两者仍然是可搜索的。

当然,您可能已经知道这一点,并没有将其添加到问题中,以保持简单。这只是我脑海中一个非常新鲜的话题。