我有以下类(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/