2010-02-15 90 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

相關問題