2010-11-13 82 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等。

葡萄牙語和西班牙語也是語言,我們已經警告不要將所有方言混合在一起,儘管差異不太劇烈,並且兩者仍然是可搜索的。

當然,您可能已經知道這一點,並沒有將其添加到問題中,以保持簡單。這只是我腦海中一個非常新鮮的話題。