2010-02-15 59 views
1

上下文=>
调用wcf,一些随机存储过程和sql的东西从理论上导入一些数据。使用nhibernate.search时,重建索引lucene.net索引的最简单方法是什么?

要求=>
某些导入实体的Reindex lucene索引。

Question =>
最简单的方法是什么?

理论上,如果nhibernate被初始化,nhibernate.search应该知道哪些实体应该被索引。因此 - 我想知道,有没有准备好使用工具/什么不能满足我的要求?


this唯一的办法吗?

+1

我用这种方式,它工作正常 – 2010-02-17 11:08:05

回答

3

我的快速和肮脏的方法=>

public static class LuceneReindexer 
    { 
     public static void Run() 
     {  
      var entityTypes = typeof(FooEntity).Assembly.GetTypes() 
       .Where(x => x.BaseType == typeof(Entity) 
        || x.BaseType == typeof(KeyedEntity)); 

      foreach (var t in entityTypes) 
       if (TypeDescriptor 
        .GetAttributes(t)[typeof(IndexedAttribute)] != null) 
         ReindexEntity(t); 
     } 

     private static void ReindexEntity(Type t) 
     { 
      var stop = false; 
      var index = 0; 
      const int pageSize = 500; 

      do 
      { 
       var list = NHibernateSession.Current.CreateCriteria(t) 
        .SetFirstResult(index) 
        .SetMaxResults(pageSize).List(); 

       NHibernateSession.Current.Transaction.Begin(); 
       foreach (var itm in list) 
        NHibernateSession.Current.Index(itm); 
       NHibernateSession.Current.Transaction.Commit(); 

       index += pageSize; 
       if (list.Count < pageSize) stop = true; 
      } while (!stop); 
     } 
    } 

有关事务和寻呼一部分(目前不关心)的任何建议。亲切a做我需要的。 :D

相关问题