.net - Lucene 索引多语言复杂实体

标签 .net lucene.net multilingual lucene

我有以下类(class):

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 对应一个字段),但是我如何才能确定文本使用的是哪种语言而不陷入相当复杂的查询中?

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

最佳答案

我会创建 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 bool 查询 (all AND EN), (all AND NL).

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

关于.net - Lucene 索引多语言复杂实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21330929/

相关文章:

.net - 霍恩盖特怎么了?

.net - 如何解决带有 PlatformNotSupportedException 的程序集?

.net - 确定是否正在使用 GAC 和 NGen 的程序集

c# - 如何使用排序功能搜索 lucene.net?

hibernate - 臭名昭著的: Invalid index n for this SqlParameterCollection with Count=

.net - 安装 .net 窗口服务时出错 :The name is already in use as either a server or service name

nhibernate - 如何将 NHibernate 与 Lucene.Net 集成

html - 我的 hreflang 标签有什么问题?

android - 如何在android中为不同的语言使用不同的png无文本按钮?

java - 有没有支持韩语的Java SQL解析器?