问题描述
各位大神,萌新现在有个问题不知道怎么解决,比如说我有十张表,每个表里都有大量的数据,我怎么能将所有数据的每个字段都创建索引呢,如果说手动加的话,那岂不是非常麻烦?还有就是我怎么将这个数据库中所有表的所有数据全部抛给lucene来用于检索呢?急急急,跪求各位大神解决目前我市这么处理的:publicstringCreatLC(){try{stringsql="SELECT*FROMProduct";List<Product>a=newList<Product>();CreatLucene<Product>.PrepareIndex(newPanGuAnalyzer(),true,Config.INDEX_Product,a,sql);return"成功";}catch(Exception){return"失败";}}publicstaticvoidPrepareIndex(Analyzeranalyzer,boolb,stringpath,List<T>list,stringsql){//根据地址创建目录DirectoryInfodirInfo=Directory.CreateDirectory(path);//FSDirectory:指定索引库文件存放位置,是Diectory的子类//将索引文件存放在创建的目录dirInfo中LuceneIO.Directorydirectory=LuceneIO.FSDirectory.Open(dirInfo);//IndexWriter:对索引文件进行写的类IndexWriterwriter=newIndexWriter(directory,analyzer,b,IndexWriter.MaxFieldLength.LIMITED);DBHelperdb=DBHelper.GetInstance();list=db.Fetch<T>(sql);Typetype=typeof(T);PropertyInfo[]ps=type.GetProperties();foreach(variteminlist){CreateIndex(writer,item);}writer.Optimize();writer.Close();}///<summary>///创建索引///</summary>///<paramname="analyzer"></param>///<paramname="title"></param>///<paramname="content"></param>privatestaticvoidCreateIndex(IndexWriterwriter,Tentity){try{Documentdoc=newDocument();Typetype=typeof(T);PropertyInfo[]ps=type.GetProperties();foreach(PropertyInfopinps){objectvalue=p.GetValue(entity,null);if(value!=null){//if(p.Name=="pinyin")//{//doc.Add(newField(p.Name,value.ToString(),Field.Store.YES,Field.Index.ANALYZED));//存储且索引//}//else//{doc.Add(newField(p.Name,value.ToString(),Field.Store.YES,Field.Index.ANALYZED));//存储且索引//}}}writer.AddDocument(doc);}catch(FileNotFoundExceptionfnfe){throwfnfe;}catch(Exceptionex){throwex;}}
解决方案
解决方案二:
大神都哪去了,顶顶顶
解决方案三:
不需要全部缩引呀,只要缩引你要的字段,比录标题,内容,这两个就可以了当然缩引还是要定期执行的,手动自动,你自己可以实现luc本来就是只使用关键字段,而不是全部字段,这东西也是模糊搜索
解决方案四:
lucene.net没有更新这么一说,只有删除掉重新创建索引,每个表都需要自己去写过程,没有让你可以实现“数据库中所有表的所有数据全部抛给lucene来用于检索”的现成方法。所以你只需要定期的将新的信息创建进去,如果有变化的部分,比如说信息之类的,先将原来的IDKEY值删除,重新创建。
解决方案五:
引用2楼wyd1520的回复:
不需要全部缩引呀,只要缩引你要的字段,比录标题,内容,这两个就可以了当然缩引还是要定期执行的,手动自动,你自己可以实现luc本来就是只使用关键字段,而不是全部字段,这东西也是模糊搜索
但是我确实要对一些基础数据表中的大部分数据做索引啊,你看可不可以这样,就是在分词过后,直接把分好的词全部创建为索引,这样会不会导致系统运行很慢呢,而且有什么方法可以区分出这个索引是否已经被创建呢?
解决方案六:
引用3楼feiyun_Web的回复:
lucene.net没有更新这么一说,只有删除掉重新创建索引,每个表都需要自己去写过程,没有让你可以实现“数据库中所有表的所有数据全部抛给lucene来用于检索”的现成方法。所以你只需要定期的将新的信息创建进去,如果有变化的部分,比如说信息之类的,先将原来的IDKEY值删除,重新创建。
您说的很有道理,但是请问该怎么做呢,就我写的这段代码,您可以稍微指点下该怎么改吗?