上下文=>
调用wcf,一些随机存储过程和sql东西理论上会导入一些数据。
要求=>
一些导入实体的Reindex lucene索引。
问题=>
最简单的方法是什么?
理论上,如果初始化了nhibernate,那么nhibernate.search应该知道哪些实体应该被索引。因此 - 我想知道,有没有准备好使用工具/诸如此类来满足我的要求?
this是唯一的方法吗?
答案 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