lucene.net创建海量索引问题

qq632323051 2016-05-17 10:43:04
各位大神,萌新现在有个问题不知道怎么解决,
比如说我有十张表,每个表里都有大量的数据,我怎么能将所有数据的每个字段都创建索引呢,如果说手动加的话,那岂不是非常麻烦?还有就是我怎么将这个数据库中所有表的所有数据全部抛给lucene来用于检索呢?急急急,跪求各位大神解决

目前我市这么处理的:


public string CreatLC()
{
try
{
string sql = "SELECT * FROM Product";
List<Product> a = new List<Product>();
CreatLucene<Product>.PrepareIndex(new PanGuAnalyzer(), true, Config.INDEX_Product, a, sql);

return "成功";
}
catch (Exception)
{

return "失败";
}

}

public static void PrepareIndex(Analyzer analyzer, bool b, string path, List<T> list, string sql)
{
//根据地址创建目录
DirectoryInfo dirInfo = Directory.CreateDirectory(path);
//FSDirectory:指定索引库文件存放位置,是Diectory的子类
//将索引文件存放在创建的目录dirInfo中
LuceneIO.Directory directory = LuceneIO.FSDirectory.Open(dirInfo);
//IndexWriter:对索引文件进行写的类
IndexWriter writer = new IndexWriter(directory, analyzer, b, IndexWriter.MaxFieldLength.LIMITED);
DBHelper db = DBHelper.GetInstance();

list = db.Fetch<T>(sql);
Type type = typeof(T);
PropertyInfo[] ps = type.GetProperties();
foreach (var item in list)
{


CreateIndex(writer, item);

}


writer.Optimize();
writer.Close();
}

/// <summary>
/// 创建索引
/// </summary>
/// <param name="analyzer"></param>
/// <param name="title"></param>
/// <param name="content"></param>
private static void CreateIndex(IndexWriter writer, T entity)
{
try
{
Document doc = new Document();

Type type = typeof(T);
PropertyInfo[] ps = type.GetProperties();
foreach (PropertyInfo p in ps)
{
object value = p.GetValue(entity, null);
if (value != null)
{

//if (p.Name == "pinyin")
//{
// doc.Add(new Field(p.Name, value.ToString(), Field.Store.YES, Field.Index.ANALYZED));//存储且索引
//}
//else
//{
doc.Add(new Field(p.Name, value.ToString(), Field.Store.YES, Field.Index.ANALYZED));//存储且索引
//}
}
}
writer.AddDocument(doc);
}
catch (FileNotFoundException fnfe)
{
throw fnfe;
}
catch (Exception ex)
{
throw ex;
}
}


...全文
127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq632323051 2016-05-17
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
不需要全部缩引呀,只要缩引你要的字段,比录标题,内容,这两个就可以了 当然 缩引还是要定期执行的,手动自动,你自己可以实现 luc本来就是只使用关键字段,而不是全部字段,这东西也是模糊搜索
但是我确实要对一些基础数据表中的大部分数据做索引啊,你看可不可以这样,就是在分词过后,直接把分好的词全部创建为索引,这样会不会导致系统运行很慢呢,而且有什么方法可以区分出这个索引是否已经被创建呢?
我是飞云 2016-05-17
  • 打赏
  • 举报
回复
lucene.net没有更新这么一说,只有删除掉重新创建索引,每个表都需要自己去写过程,没有让你可以实现“数据库中所有表的所有数据全部抛给lucene来用于检索”的现成方法。 所以你只需要定期的将新的信息创建进去,如果有变化的部分,比如说信息之类的,先将原来的IDKEY值删除,重新创建。
本拉灯 2016-05-17
  • 打赏
  • 举报
回复
不需要全部缩引呀,只要缩引你要的字段,比录标题,内容,这两个就可以了 当然 缩引还是要定期执行的,手动自动,你自己可以实现 luc本来就是只使用关键字段,而不是全部字段,这东西也是模糊搜索
qq632323051 2016-05-17
  • 打赏
  • 举报
回复
大神都哪去了,顶顶顶
qq632323051 2016-05-17
  • 打赏
  • 举报
回复
引用 3 楼 feiyun_Web 的回复:
lucene.net没有更新这么一说,只有删除掉重新创建索引,每个表都需要自己去写过程,没有让你可以实现“数据库中所有表的所有数据全部抛给lucene来用于检索”的现成方法。 所以你只需要定期的将新的信息创建进去,如果有变化的部分,比如说信息之类的,先将原来的IDKEY值删除,重新创建。
您说的很有道理,但是请问该怎么做呢,就我写的这段代码,您可以稍微指点下该怎么改吗?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧