(N)Hibernate.Search: индексирование различных свойств в одном поле

Когда я использовал Lucene для индексации своих сущностей, у меня была привычка помещать все мои проиндексированные свойства в поле с именем "all", чтобы выполнять поиск по "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);

Где "scope" - это имя поля индекса (здесь "All"). Если я поставлю чек, как

if( !scopedAnalyzers.ContainsKey( scope ) )

это будет работать довольно хорошо: у меня будет 2 поля для каждого документа "Post", одно с телом, одно с именем. Однако мне нелегко изменить исходный код NHibernate.Search.

Кто-нибудь получил предложение о том, как индексировать различные свойства в одном поле?

1 ответ

Решение

Если у вас возникают проблемы с использованием атрибутов Field для указания того, что вам нужно, вы можете создать мост класса, который позволит вам создать свой собственный документ.

просто используйте ClassBridgeAttribute в определении класса и укажите тип, который реализует интерфейс IFieldBridge. Это позволит вам полностью контролировать, как создаются документы Lucene.

Дополнительную информацию можно найти по адресу http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-mapping-bridge.html см. 4.2.2.3. Секция ClassBridge

Другие вопросы по тегам