【问题标题】:Solr: DIH for multilingual index & multiValued field?Solr:用于多语言索引和多值字段的 DIH?
【发布时间】:2011-05-09 15:30:41
【问题描述】:

我有一个 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",那么我想将"blue""green""yellow" 三个值索引到 Solr 多值字段中。

如何使用 DIH 做到这一点?

谢谢。

【问题讨论】:

    标签: solr multilingual dataimporthandler


    【解决方案1】:

    很抱歉,我无法直接回答您的 DIH 问题,但知道会很有趣。

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

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

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

    【讨论】:

      【解决方案2】:

      首先,您的架构需要通过以下方式允许它:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        相关资源
        最近更新 更多