public ActionResult Index(string btncreate) { MultiSite_GangGuanEntities Bll = new Models.MultiSite_GangGuanEntities(); int pageSize = 200; //页大小 int totalNum = Bll.Products_SellOffer.Count(); //总条数 int pageNum = totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1; //页数 int i = 0; try { for (i = 0; i < pageNum; i++) { List <Products_SellOffer> list = new List <Models.Products_SellOffer>(); list = Bll.Products_SellOffer.OrderBy(o => o.Id > 0).Skip(i * pageSize).Take(pageSize).ToList(); //list = Bll.Products_SellOffer.OrderBy(o => o.Id > 0).Take(pageSize).ToList(); Thread.Sleep(1500); CreateIndex(list); //totalNum = totalNum - list.Count; } } catch (Exception) { Response.Write("第+" + i + "+页出问题出错"); } //if (totalNum == 0) //{ // Response.Write("创建完成"); //} Response.Write("创建完成"); return(View()); }
public void CreateTestIndex(string name) { MultiSite_GangGuanEntities Bll = new Models.MultiSite_GangGuanEntities(); string indexpath = HttpContext.Server.MapPath("/Indexdata"); FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexpath), new NoLockFactory()); 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); Document document = new Document(); Field title = new Field("title", name, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); document.Add(title); writer.AddDocument(document); //文档写入索引库 writer.Optimize(); writer.Close(); //会自动解锁 directory.Close(); //不要忘了Close,否则索引结果搜不到 }
public void CreateIndex(List <Products_SellOffer> prolist) { MultiSite_GangGuanEntities Bll = new Models.MultiSite_GangGuanEntities(); string indexpath = HttpContext.Server.MapPath("/Indexdata"); FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexpath), new NoLockFactory()); 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); foreach (var pitem in prolist) { 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", Bll.Products_SellOffer_Detail.Where(d => d.SellOfferId == pitem.Id).FirstOrDefault().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,否则索引结果搜不到 }