2014-01-24 3 views
3

У меня есть следующие классы:индекса Lucene многоязычного сложное образование

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

Так что я способен хранить описание на нескольких языках.

Я хотел бы проиндексировать объект Job (включая его свойства Resource) в Lucene.Net, чтобы иметь возможность искать что-либо на всех языках или в указанном.

Я рассмотрел другие соответствующие вопросы по SO или в других местах, но я не совсем уверен, что делать.

Я рассмотрел использование нескольких полей (по одному для каждого TextValue каждого ресурса в классе Job), но как я могу определить, на каком языке находится текст, не попадая в довольно сложные запросы?

Я полагаю, что смогу управлять так или иначе, но я все еще спрашиваю на всякий случай, что у кого-то отличная идея, которую мне не хватает.

ответ

2

Я хотел бы создать 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 для всех языковых полей. Затем вы можете получить факс-счета для каждого языкового поля в одном (быстром) запросе. Наивысшим скоринговым аспектом будет язык, соответствующий поиску.

Смежные вопросы