Когато използвах 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; }
}
Но имам хвърлено изключение: „ключът вече присъства в речника“, в ScopedAnalyzer.cs ред 26:
scopedAnalyzers.Add(scope, analyzer);
Където "обхват" е името на индексното поле (тук "Всички"). Ако сложа чек като
if( !scopedAnalyzers.ContainsKey( scope ) )
ще работи доста добре: ще имам 2 полета за всеки документ "Post", едно с тялото, едно с името. Въпреки това не ми е лесно да модифицирам изходния код на NHibernate.Search.
Някой има ли предложение как да индексира различни свойства в едно поле?