private static void CreateIndex(List <SellOffer> list) { string indexpath = ConfigurationManager.AppSettings["Indexpath"]; FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexpath), new NativeFSLockFactory()); //IndexReader:对索引库进行读取的类 bool isExist = IndexReader.IndexExists(directory); //是否存在索引库文件夹以及索引库特征文件 if (isExist) { //如果索引目录被锁定(比如索引过程中程序异常退出或另一进程在操作索引库),则解锁 //Q:存在问题 如果一个用户正在对索引库写操作 此时是上锁的 而另一个用户过来操作时 将锁解开了 于是产生冲突 --解决方法后续 if (IndexWriter.IsLocked(directory)) { IndexWriter.Unlock(directory); } } IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isExist, IndexWriter.MaxFieldLength.UNLIMITED); ISellOfferDetail selldetailBll = new SellOfferDetailService(); try { foreach (var pitem in list) { SellOfferDetail offerdetail = new SellOfferDetail(); offerdetail = selldetailBll.SearchById(pitem.Id); Document document = new Document(); Field id = new Field("id", pitem.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED); Field title = new Field("title", pitem.Title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); title.SetBoost(1.0f); Field keywords = new Field("keywords", pitem.Keywords, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); keywords.SetBoost(0.7f); Field detail = new Field("detail", offerdetail.Detail, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); Field sysattr = new Field("sysattr", pitem.SysAttr, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); sysattr.SetBoost(0.4f); Field cusattr = new Field("cusattr", pitem.CusAttr, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); cusattr.SetBoost(0.1f); document.Add(id); document.Add(title); document.Add(keywords); document.Add(detail); document.Add(sysattr); document.Add(cusattr); writer.AddDocument(document); //文档写入索引库 } writer.Optimize(); writer.Close(); //会自动解锁 directory.Close(); //不要忘了Close,否则索引结果搜不到 } catch (Exception ex) { Utility.writelog("创建索引出问题:" + ex + ""); } }
public SellOfferDetail SearchById(int id) { SellOfferDetail detail = new SellOfferDetail(); DataTable dt = new DataTable(); dt = SqlHelper.Search(@"select * from Products_SellOffer_Detail where SellOfferId=@id", new SqlParameter[] { new SqlParameter("@id", id) }); if (dt.Rows.Count == 1) { detail.Id = (int)dt.Rows[0]["Id"]; detail.SellOfferId = (int)dt.Rows[0]["SellOfferId"]; detail.Detail = dt.Rows[0]["Detail"].ToString(); } return(detail); }