如何以编程方式为NHibernate搜索(Lucene.net)添加索引列,而不使用FieldAttribute

如何以编程方式为NHibernate搜索(Lucene.net)添加索引列,而不使用FieldAttribute,nhibernate,search,lucene,lucene.net,Nhibernate,Search,Lucene,Lucene.net,我试图找出如何通过编程(即不使用FieldAttribute)为NHibernate搜索(Lucene.net)添加索引列 由于FieldAttribute不是自动继承的,因此我有继承问题 下面的代码说明了我想做什么 class A { [Field(Index.Tokenized)] public virtual string P1 { get { return "P1"; } } } c

我试图找出如何通过编程(即不使用
FieldAttribute
)为NHibernate搜索(Lucene.net)添加索引列

由于
FieldAttribute
不是自动继承的,因此我有继承问题

下面的代码说明了我想做什么

class A
{
    [Field(Index.Tokenized)]
    public virtual string P1
    {
        get
        {
            return "P1";
        }
    }
}

class B : A
{
    public override string P1
    {
        get
        {
            return "P1+";
        }
    }
}
我期望P1的覆盖被索引,但它没有。当我检查
FieldAttribute
类时,我发现它没有在
AttributeUsage
属性中指定
Inherited=true

然后,我向重写的属性添加了一个
FieldAttribute
,但这导致NHibernate搜索退出,出现一个异常,表明具有相同键的项已添加到字典中。我想这是因为在类型链中有两个名称相同的属性,它们都带有
FieldAttribute
,并且它只接受一个属性


那么,我如何通过不使用
FieldAttribute
以编程方式解决这个问题呢?

最近实现了非属性映射,请看。

我刚刚启动了一个类似于FluentNHibernate的Fluent NHibernate.Search映射界面,它允许您映射没有属性的实体

public class BookSearchMap : DocumentMap<Book>
{
    public BookSearchMap()
    {
        Id(p => p.BookId).Field("BookId").Bridge().Guid();
        Name("Book");
        Boost(500);
        Analyzer<StandardAnalyzer>();

        Map(x => x.Title)
            .Analyzer<StandardAnalyzer>()
            .Boost(500);

        Map(x => x.Description)
            .Boost(500)
            .Name("Description")
            .Store().Yes()
            .Index().Tokenized();
    }
}
public类BookSearchMap:DocumentMap
{
公共图书搜索地图()
{
Id(p=>p.BookId).Field(“BookId”).Bridge().Guid();
名称(“书”);
升压(500);
分析器();
地图(x=>x.Title)
.Analyzer()
.Boost(500);
映射(x=>x.Description)
.Boost(500)
.名称(“说明”)
.Store().Yes()
.Index().Tokenized();
}
}
您应该查看托管在codeplex上的项目站点


太好了,我没有看到那个编辑,但我很高兴看到那个补丁被加入!