2

我有一个 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字段需要被索引到一个 SolrmultiValued字段中。多个值存储在一个字符串中,用逗号分隔。例如,如果tags包含字符串,"blue, green, yellow"那么我想将 3 个值"blue", "green",索引"yellow"到 Solr 多值字段中。

我如何使用 DIH 做到这一点?

谢谢。

4

2 回答 2

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>
于 2011-02-25T15:26:34.973 回答
2

很抱歉,我没有关于您的 DIH 问题的直接答案,尽管知道会很有趣。

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

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

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

于 2011-01-19T18:14:39.940 回答