Когда я использовал Lucene для индексации своих сущностей, у меня была привычка помещать все мои проиндексированные свойства в поле с именем «все», чтобы выполнять поиск по «всем» типам моих сущностей.
Теперь, используя NHibernate.Search, я не могу найти, как это сделать. Я пробовал это:
[Indexed(Index = "MyIndex")]
public class Post
{
[DocumentId]
public virtual int Id { get; set; }
[IndexedEmbedded]
public virtual Author Author { get; set; }
[IndexedEmbedded]
public virtual IEnumerable<Category> Categories { get; set; }
[Field(Index.Tokenized, Store = Store.Yes)]
[Field(Name = "All", Index = Index.Tokenized, Store = Store.Yes)]
public virtual string Name { get; set; }
[Field(Name = "All", Index = Index.Tokenized, Store = Store.Yes)]
[Field(Index.Tokenized, Store = Store.Yes)]
public virtual string Body { get; set; }
}
Но у меня есть исключение: «ключ уже присутствует в словаре», в строке 26 ScopedAnalyzer.cs:
scopedAnalyzers.Add(scope, analyzer);
Где «область» — это имя поля индекса (здесь «Все»). Если я поставлю галочку вроде
if( !scopedAnalyzers.ContainsKey( scope ) )
это будет работать довольно хорошо: у меня будет 2 поля для каждого документа «Post», одно с телом, одно с именем. Однако мне нелегко модифицировать исходный код NHibernate.Search.
У кого-нибудь есть предложение о том, как индексировать разные свойства в одном поле?