求Lucene.net高人解决下索引文件更新问题 项目是个B2B的网站,用的是Lucene.net搜索引擎,会生成一些类似于.cfs、.gen、.del的索引文件,因为专门弄这个的技术走了,索引文件无法更新,找不到新添加的新数据,求高人告知如何进行索引文件更新....就是如何将数据库中的数据弄到索引文件中... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是如何将数据库中的数据弄到索引文件中...这个应该可以搜索到的。lucene.net我还没用过 http://pangusegment.codeplex.com/SourceControl/list/changesets 盘古分词最新版 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("索引更新成功!!"); /// <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(); } 要是数据库更新了,Lucene.net索引怎么更新,不会又要重新建立一次吧? lucene的更新原理是删除,重新插入,他自己有个indexmodify方法,你去看下他的构成,也是先删除后插入的方式,但是你可以直接调用这个方法做更新,不用自己重新写了 40分啦!!!HTML什么时候用"",什么时候用'' 如何用SqlDataSource1掉用oracle的返回数据集的存储过程 问个大数据量的分区管理的问题,该如何做? Style[属性] AspNetPager无法分页问题!!研究N久了。 关于不用任何的控件绑定来显示数据的方法,说说你们都是怎么做的,20分~ 小问题。。。。 ASP.NET下载问题! html里面 <!--include file="XXX"-->显示不正确,什么原因? 我已经注册了ASP1。1,可还是无法新建ASP项目 关于ASP.NET页面之间传值的问题 ASP.NET 异常处理,找不到原因
这个应该可以搜索到的。lucene.net我还没用过
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("索引更新成功!!");
/// 批量更新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();
}