项目是个B2B的网站,用的是Lucene.net搜索引擎,会生成一些类似于.cfs、.gen、.del的索引文件,因为专门弄这个的技术
走了,索引文件无法更新,找不到新添加的新数据,求高人告知如何进行索引文件更新....就是如何将数据库中的数据弄到索引文件中...

解决方案 »

  1.   

    就是如何将数据库中的数据弄到索引文件中...
    这个应该可以搜索到的。lucene.net我还没用过
      

  2.   

    http://pangusegment.codeplex.com/SourceControl/list/changesets 盘古分词最新版
      

  3.   

     string INDEX_STORE_PATH = Server.MapPath("~\\seacherIndex");  //Index 为索引存储目录
            IndexWriter writer = new IndexWriter(INDEX_STORE_PATH, new StandardAnalyzer(), true);//实例化索引器
            IList<product> list = pBll.GetModel();
            foreach (product p in list)
            {
                Document doc = new Document();
                doc.Add(new Field("productId",p.productId.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("productName",p.productName, Field.Store.YES, Field.Index.TOKENIZED));
                doc.Add(new Field("Price", p.Price.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pInfo",p.pInfo, Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pClassId",p.pClassId.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pTitle", p.pTitle.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pKey", p.pKey.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pDescription", p.pDescription.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pButtom", p.pButtom.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pDate",p.pDate.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("eDate", p.eDate.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pSourse", p.pSourse.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("ptag", p.ptag.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("pSort", p.pSort.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                doc.Add(new Field("SearchAll",p.pInfo+p.ptag+p.productName, Field.Store.YES, Field.Index.TOKENIZED));
                writer.AddDocument(doc);
            }
            writer.Optimize();
            writer.Close();
            JsUtil.ShowMsg("索引更新成功!!");
      

  4.   

     /// <summary>
            /// 批量更新VP索引
            /// </summary>
            public static void BatchUpdate()
            {
                #region VB索引批量更新(修改或增加)索引文件中的记录
                DataSet VB_dsUpdatedMsgID = DbHelperSQL.Query("SELECT MsgID FROM Temp_vb WHERE (ID IN (SELECT MAX(ID) FROM Temp_vb GROUP BY MsgID)) and VB_Type=1");
                if (VB_dsUpdatedMsgID.Tables[0].Rows.Count > 0)
                {
                    DirectoryInfo VB_indexDir = new DirectoryInfo(VBIndexPath);
                    IndexWriter VB_writer = new IndexWriter(Lucene.Net.Store.FSDirectory.Open(VB_indexDir), new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_CURRENT), IndexWriter.MaxFieldLength.UNLIMITED);
                    for (int i = 0; i < VB_dsUpdatedMsgID.Tables[0].Rows.Count; i++)
                    {
                        DataSet VB_dsOneMsg = DbHelperSQL.Query("select ID,MID,Country,Subject,CompanyName,LinkName,Email,State as Usgb_State,sendtime from UserMsgBox where ID=" + VB_dsUpdatedMsgID.Tables[0].Rows[i]["MsgID"].ToString());                    if (VB_dsOneMsg.Tables[0].Rows.Count > 0)
                        {                        DataSet VB_Content = DbHelperSQL.Query("select [Content] from UserMsgBox where ID=" + VB_dsOneMsg.Tables[0].Rows[0]["ID"].ToString());
                            DataSet VB_dsOrders = DbHelperSQL.Query("select PID from Orders where MsgID=" + VB_dsUpdatedMsgID.Tables[0].Rows[i]["MsgID"].ToString());
                            for (int k = 0; k < VB_dsOrders.Tables[0].Rows.Count; k++)
                            {
                                if (VB_dsOrders.Tables[0].Rows.Count > 0)
                                {
                                    DataSet VB_dsProducts = DbHelperSQL.Query("select PID,SubType,Products.State,Products.Shield,InfoTitle,ProductName,Products.MainType,Products.Tags from Products where PID=" + VB_dsOrders.Tables[0].Rows[k]["PID"].ToString());
                                    DataSet VB_dsMembers = DbHelperSQL.Query("select Members.MID,Members.flag,UserNo,RegTime,ServicEndTime from Members where MID=" + VB_dsOneMsg.Tables[0].Rows[0]["MID"].ToString());                                if (VB_dsProducts.Tables[0].Rows.Count > 0 && VB_dsMembers.Tables[0].Rows.Count > 0)
                                    {
                                        Document VB_doc = new Document();
                                        VB_doc.Add(new Field("ID", VB_dsOneMsg.Tables[0].Rows[0]["ID"].ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                                        VB_doc.Add(new Field("MID", VB_dsOneMsg.Tables[0].Rows[0]["MID"].ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
                                        VB_doc.Add(new Field("Country", VB_dsOneMsg.Tables[0].Rows[0]["Country"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("Subject", VB_dsOneMsg.Tables[0].Rows[0]["Subject"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                                        VB_doc.Add(new Field("CompanyName", VB_dsOneMsg.Tables[0].Rows[0]["CompanyName"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                                        VB_doc.Add(new Field("LinkName", VB_dsOneMsg.Tables[0].Rows[0]["LinkName"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("Email", VB_dsOneMsg.Tables[0].Rows[0]["Email"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("Usgb_State", VB_dsOneMsg.Tables[0].Rows[0]["Usgb_State"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("sendtime", Common.DateTime2IndexTime(VB_dsOneMsg.Tables[0].Rows[0]["sendtime"].ToString()), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("Content", VB_Content.Tables[0].Rows[0]["Content"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));                                    VB_doc.Add(new Field("PID", VB_dsProducts.Tables[0].Rows[0]["PID"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("SubType", VB_dsProducts.Tables[0].Rows[0]["SubType"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("State", VB_dsProducts.Tables[0].Rows[0]["State"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("Shield", Common.Bool2String(VB_dsProducts.Tables[0].Rows[0]["Shield"].ToString()), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("InfoTitle", VB_dsProducts.Tables[0].Rows[0]["InfoTitle"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                                        VB_doc.Add(new Field("ProductName", VB_dsProducts.Tables[0].Rows[0]["ProductName"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                                        VB_doc.Add(new Field("MainType", VB_dsProducts.Tables[0].Rows[0]["MainType"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                                        VB_doc.Add(new Field("Tags", VB_dsProducts.Tables[0].Rows[0]["Tags"].ToString(), Field.Store.YES, Field.Index.ANALYZED));                                    VB_doc.Add(new Field("MID", VB_dsMembers.Tables[0].Rows[0]["MID"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                                        VB_doc.Add(new Field("flag", VB_dsMembers.Tables[0].Rows[0]["flag"].ToString() == "2" ? "4" : VB_dsMembers.Tables[0].Rows[0]["flag"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("UserNo", VB_dsMembers.Tables[0].Rows[0]["UserNo"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("RegTime", Common.DateTime2IndexTime(VB_dsMembers.Tables[0].Rows[0]["RegTime"].ToString()), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_doc.Add(new Field("ServicEndTime", Common.DateTime2IndexTime(VB_dsMembers.Tables[0].Rows[0]["ServicEndTime"].ToString()), Field.Store.YES, Field.Index.NOT_ANALYZED));
                                        VB_writer.AddDocument(VB_doc);
                                    }
                                }
                            }                    }
                    }
                    VB_writer.Optimize();
                    VB_writer.Close();
                }
      

  5.   

    要是数据库更新了,Lucene.net索引怎么更新,不会又要重新建立一次吧?
      

  6.   

    lucene的更新原理是删除,重新插入,他自己有个indexmodify方法,你去看下他的构成,也是先删除后插入的方式,但是你可以直接调用这个方法做更新,不用自己重新写了