public void UpdateLucene() { LuceneHelper.CreateIndex(PostBll.LoadEntitiesNoTracking(p => p.Status == Status.Pended)); LuceneHelper.IncreaseIndex(); }
/// <summary> /// 索引数据 /// </summary> private void CreateSearchIndex(HttpContext context) { //检查权限 if (!new BLL.manager_role().Exists(adminInfo.role_id, "lucene_index", DTEnums.ActionEnum.Build.ToString())) { context.Response.Write("{\"status\": 0, \"msg\": \"您没有确认订单的权限!\"}"); return; } bool hasnew = false; int is_create = DTRequest.GetQueryInt("create"); int is_lock = is_create; string strWhere = "status=0"; BLL.article bll = new BLL.article(); BLL.channel chl = new BLL.channel(); BLL.luceneconfig xml = new BLL.luceneconfig(); List <Model.luceneconfig> list = xml.Load(); foreach (Model.luceneconfig model in list) { if (!chl.Exists(model.name)) { continue; } if (is_create == 0) { strWhere += " and id >" + model.id.ToString(); } if (model.status == 1) { DataTable dt = bll.GetList(model.name, 1000, strWhere, "id asc").Tables[0]; int _count = dt.Rows.Count; if (_count > 0) { int count = 0; hasnew = true; LuceneHelper.CreateIndex(LuceneHelper.INDEX_DIR, is_lock); LuceneHelper.MaxMergeFactor = 301; LuceneHelper.MinMergeDocs = 301; string _maxid = dt.Rows[_count - 1]["ID"].ToString(); SearchItem item = null; if (is_lock > 0) { is_lock = 0; } for (int j = 0; j < dt.Rows.Count; j++) { item = new SearchItem(); item.id = Utils.StrToInt(dt.Rows[j]["id"].ToString(), 0); item.site_id = Utils.StrToInt(dt.Rows[j]["site_id"].ToString(), 0); item.channel_id = Utils.StrToInt(dt.Rows[j]["channel_id"].ToString(), 0); item.category_id = Utils.StrToInt(dt.Rows[j]["category_id"].ToString(), 0); item.title = dt.Rows[j]["title"].ToString(); //if (dt.Columns.Contains("sub_title")) //{ // item.sub_title = dt.Rows[j]["sub_title"].ToString(); //} //else //{ // item.sub_title = ""; //} item.call_index = dt.Rows[j]["call_index"].ToString(); item.tags = dt.Rows[j]["tags"].ToString(); item.img_url = dt.Rows[j]["img_url"].ToString(); //item.zhaiyao = dt.Rows[j]["zhaiyao"].ToString(); item.zhaiyao = Utils.DropHTML(dt.Rows[j]["content"].ToString()); //if (dt.Columns.Contains("market_price")) //{ // item.market_price = Utils.StrToDecimal(dt.Rows[j]["market_price"].ToString(), 0); //} //else //{ // item.market_price = 0; //} //if (dt.Columns.Contains("sell_price")) //{ // item.sell_price = Utils.StrToInt(dt.Rows[j]["sell_price"].ToString(), 0); //} //else //{ // item.sell_price = 0; //} //item.is_top = Utils.StrToInt(dt.Rows[j]["is_top"].ToString(), 0); //item.is_red = Utils.StrToInt(dt.Rows[j]["is_red"].ToString(), 0); //item.is_hot = Utils.StrToInt(dt.Rows[j]["is_hot"].ToString(), 0); item.add_time = DateTime.Parse(dt.Rows[j]["add_time"].ToString()); item.update_time = Utils.StrToDateTime(dt.Rows[j]["update_time"].ToString(), item.add_time); LuceneHelper.IndexString(LuceneHelper.INDEX_DIR, item).ToString(); count++; if (count % 300 == 0) { LuceneHelper.CloseWithoutOptimize(); LuceneHelper.CreateIndex(LuceneHelper.INDEX_DIR, 0); LuceneHelper.MaxMergeFactor = 301; LuceneHelper.MinMergeDocs = 301; } } xml.Update("Lucene/" + model.name + "/lastid", _maxid); xml.Update("Lucene/" + model.name + "/lasttime", System.DateTime.Now.ToString()); xml.Save(); LuceneHelper.Close(); } } } if (hasnew) { JsonHelper.WriteJson(context, new { status = 2, msg = "再去追加一次吧" }); } else { JsonHelper.WriteJson(context, new { status = 1, msg = "索引更新完成" }); } }