1

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

要求 =>
为一些导入的实体重新索引 lucene 索引。

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

理论上,如果 nhibernate 被初始化,nhibernate.search 应该知道哪些实体应该被索引。因此 - 我想知道,是否有任何现成的工具/什么不能满足我的要求?


这是唯一的方法吗

4

1 回答 1

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

于 2010-02-17T11:24:23.063 回答