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 + "");
            }
        }
Exemple #2
0
        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);
        }