2009-10-10 5 views
3

Lorsque j'utilisais Lucene pour indexer mes entités, j'avais l'habitude de mettre toutes mes propriétés indexées dans un champ nommé "all", pour effectuer une recherche sur " tous "de mes types d'entités. Maintenant, en utilisant NHibernate.Search, je ne trouve pas comment faire cela. J'ai essayé ceci:(N) Hibernate.Search: Indexer différentes propriétés dans un champ

[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; } 
} 

Mais j'ai une exception levée: « clé déjà présent dans le dictionnaire », en ligne ScopedAnalyzer.cs 26:

scopedAnalyzers.Add(scope, analyzer); 

Si la « portée » est le nom de l'index champ (ici, "Tous"). Si je mets un chèque comme

if(!scopedAnalyzers.ContainsKey(scope)) 

il fonctionnera très bien: je vais avoir 2 champs pour chaque document « Post », l'un avec le corps, l'un avec le nom. Cependant, je ne suis pas facile de modifier le code source NHibernate.Search.

Quelqu'un at-il une suggestion sur la façon d'indexer différentes propriétés dans un domaine?

+0

tagged hibernate.search, car les API sont (tout à fait) les mêmes ... – mathieu

Répondre

2

Si vous ne parvenez pas à utiliser les attributs Champ pour spécifier ce dont vous avez besoin, vous pouvez créer un pont de classes qui vous permettra de créer votre propre document.

utilisez simplement ClassBridgeAttribute sur la définition de classe et spécifiez un type qui implémente l'interface IFieldBridge. Cela vous permettra d'avoir un contrôle complet sur la façon dont les documents Lucene sont construits.

plus d'informations peuvent être trouvées au http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-mapping-bridge.html voir le 4.2.2.3. Section ClassBridge

Questions connexes