代码之家  ›  专栏  ›  技术社区  ›  Sandor Drieënhuizen

如何在不使用fieldattribute的情况下以编程方式为nhibernate搜索(lucene.net)添加索引列

  •  0
  • Sandor Drieënhuizen  · 技术社区  · 15 年前

    我正在尝试找出如何以编程方式(即不使用 FieldAttribute )为nhibernate搜索添加索引列(lucene.net)。

    我有继承问题,因为 野战纪念碑 不是自动继承的。

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

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

    我期望p1的覆盖被索引,但它没有索引。 野战纪念碑 班上,我发现它没有 Inherited = true 在中指定 AttributeUsage 属性。

    然后我添加了一个 野战纪念碑 到被重写的属性,但这导致nhibernate搜索退出,并出现一个异常,说明具有相同键的项已添加到字典中。我认为这是因为有两个同名的属性 野战纪念碑 在它们的类型链中,它只接受一个。

    那么,我如何通过不使用 野战纪念碑 ?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mauricio Scheffer    15 年前

    最近实现了非属性映射,请看 this blog post .

        2
  •  1
  •   Yoann. B    15 年前

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

    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();
        }
    }
    

    您应该看看托管在codeplex上的项目站点。

    http://fnhsearch.codeplex.com/