当我使用 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; }
}
但是我在 ScopedAnalyzer.cs 第 26 行中抛出了一个异常:“字典中已存在密钥”:
scopedAnalyzers.Add(scope, analyzer);
其中“范围”是索引字段的名称(此处为“全部”)。如果我像
if( !scopedAnalyzers.ContainsKey( scope ) )
它会很好地工作:我将为每个“发布”文档设置 2 个字段,一个带有正文,一个带有名称。但是,我并不容易修改 NHibernate.Search 源代码。
有人对如何在一个字段中索引不同的属性有建议吗?