使用nhibernate.search时,最简单的方法来重新索引lucene.net索引?

时间:2010-02-15 14:46:56

标签: nhibernate lucene.net nhibernate.search

上下文=>
调用wcf,一些随机存储过程和sql东西理论上会导入一些数据。

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

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

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


this是唯一的方法吗?

1 个答案:

答案 0 :(得分: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);
        }
    }

没有关于交易和寻呼部分的想法(目前也不在乎)。善良的做了我需要的。 :d