Когда я использовал Lucene для индексации своих сущностей, у меня была привычка помещать все мои проиндексированные свойства в поле с именем «all», чтобы выполнить поиск по «всем» типам моих сущностей.
Теперь, используя 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 поля для каждого документа "Пост", одно с телом, одно с именем.
Однако мне нелегко изменить исходный код NHibernate.Search.
Кто-нибудь получил предложение о том, как индексировать различные свойства в одном поле?