【问题标题】:Lucene index multilingual complex entityLucene 索引多语言复杂实体
【发布时间】:2014-01-24 11:00:31
【问题描述】:

我有以下课程:

public class Resource
{
    public Guid? Id { get; set; }
    public IList<LocalizedValue> LocalizedValues { get; set; }
}

public class LocalizedValue
{
    public Guid? Id { get; set; }
    public Resource Resource { get; set; }
    public string Locale { get; set; }
    public string TextValue { get; set; }
}

这用于在其他对象中存储多语言数据,如下所示:

public class Job
{
    public Resource Description { get; set; }

    // some other properties...
}

所以我能够以多种语言存储描述。

我想在 Lucene.Net 中索引 Job 对象(包括它的 Resource 属性),以便能够搜索所有语言或指定语言的内容。

我查看了关于 SO 或其他地方的其他相关问题,但我不确定该怎么做。

我考虑过使用多个字段(Job 类中每个资源的每个 TextValue 一个字段),但是如何在不陷入相当复杂的查询的情况下识别文本的语言?

我想我能够以一种或另一种方式进行管理,但我仍然会问,以防万一有人有我想念的好主意。

【问题讨论】:

    标签: .net lucene.net multilingual lucene


    【解决方案1】:

    我会创建 N + 1 个字段,1 个用于每种语言,1 个用于放置所有内容。

    doc.addField("EN", //english stuff);
    doc.addField("NL", //dutch stuff);
    doc.addField("all", //english stuff and dutch stuff);
    

    在这种情况下,如果您要在特定语言中进行搜索,请使用该字段。如果要搜索所有语言,请使用all

    如果您想在搜索all 字段时弄清楚它使用的是哪种语言;你不能轻易做到这一点。您可以使用N 布尔查询(all AND EN)、(all AND NL)。

    或者更好的是,为所有语言字段创建facets。然后,您可以在一个(快速)查询中检索每个语言字段的构面计数。得分最高的方面将是与搜索匹配的语言。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 2012-04-17
      • 1970-01-01
      • 2014-06-10
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      相关资源
      最近更新 更多