Lorsque j'utilisais Lucene pour indexer mes entités, j'avais l'habitude de placer toutes mes propriétés indexées dans un champ nommé "all", afin d'effectuer une recherche sur "tous" mes types d'entités.
Maintenant, en utilisant NHibernate.Search, je ne trouve pas comment faire. J'ai essayé ceci :
[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 : "key already present in dictionary", dans ScopedAnalyzer.cs ligne 26 :
scopedAnalyzers.Add(scope, analyzer);
Où "scope" est le nom du champ d'index (ici, "All"). Si je mets un contrôle comme
if( !scopedAnalyzers.ContainsKey( scope ) )
cela fonctionnera très bien : j'aurai 2 champs pour chaque document "Post", un avec le corps, un avec le nom. Cependant, je ne suis pas à l'aise pour modifier le code source de NHibernate.Search.
Quelqu'un a-t-il une suggestion sur la façon d'indexer différentes propriétés dans un seul champ ?