/// <summary> /// 输入商品关键词,并选择筛选条件后的方法,page=1 /// </summary> /// <returns></returns> public ActionResult ChangeProductClassByKeyword_p() { try { if (-1 != HttpContext.检查登录()) { ViewData["已登录"] = "1"; } else { ViewData["已登录"] = "0"; } TopDocs serchalllist = null; //输入的商品关键词 string name = Request.QueryString["keyword"]; //筛选的条件字符串 var condition = Request.QueryString["condition"]; var page = int.Parse(Request.QueryString["page"]); //回传参数设定默认值,防止为空 ViewData["商品搜索显示列表"] = new List<商品查询>(); ViewData["pagecount"] = 1; ViewData["currentpage"] = 1; ViewData["keyword"] = name; ViewData["筛选条件"] = condition; //回传参数设定默认值,防止为空 if (!string.IsNullOrEmpty(name)) { serchalllist = SearchIndex("/Lucene.Net/IndexDic/Product", name); } var listcount = serchalllist.totalHits > 1000 ? 1000 : serchalllist.totalHits; if (serchalllist != null && listcount > 0) { //满足关键词和筛选条件临时商品集合 IList<商品查询> serchlist_temp = new List<商品查询>(); //索引处理 IndexSearcher search = new IndexSearcher(new Lucene.Net.Store.SimpleFSDirectory(new System.IO.DirectoryInfo(IndexDic("/Lucene.Net/IndexDic/Product"))), true); Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("Name", name); //先得出满足关键字的商品 for (int i = 0; i < listcount && i < 1000; i++) { 商品查询 model = new 商品查询(); model.Id = long.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("NumId")); model.商品信息.商品名 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Name"); model.商品数据.商品简介 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Description"); model.商品信息.商品图片.Add(search.Doc(serchalllist.scoreDocs[i].doc).Get("Pic")); model.销售信息.价格 = decimal.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("Price")); model.商品信息.所属供应商.用户ID = long.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("Company")); model.基本数据.修改时间 = Convert.ToDateTime(search.Doc(serchalllist.scoreDocs[i].doc).Get("AddTime")); model.商品数据.商品属性 = (null != search.Doc(serchalllist.scoreDocs[i].doc).Get("Attribute")) ? JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, List<string>>>>( search.Doc(serchalllist.scoreDocs[i].doc).Get("Attribute")) : null; //新增按地域查找 model.所属地域.省份 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Province"); model.所属地域.城市 = search.Doc(serchalllist.scoreDocs[i].doc).Get("City"); //新增按地域查找 //满足关键词的商品集合 serchlist_temp.Add(SetHighlighter(dic, model)); } //进行条件筛选 if (!string.IsNullOrEmpty(condition)) //判断筛选条件 { var pvs = condition.Split(new char[] { '$' }, StringSplitOptions.RemoveEmptyEntries); foreach (var item in pvs) { var pv = item.Split('|'); //满足筛选条件的商品集合 serchlist_temp = serchlist_temp.Where(o => { var ppp = o.商品数据.商品属性; return ppp.ContainsKey(pv[0]) && ppp[pv[0]].ContainsKey(pv[1]) && ppp[pv[0]][pv[1]].Contains(pv[2]); }).ToList(); } } //新增地域价格查找参数 var province = Request.QueryString["province"]; var city = Request.QueryString["city"]; var price = Request.QueryString["price"]; //新增地域价格查找参数 //////////////////////////////////////////////////////////////////////新增按价格查询 if (!string.IsNullOrWhiteSpace(price)) { if (price.Contains("及以上")) { price = price.Replace("及以上", ""); serchlist_temp = serchlist_temp.Where(o => { var p_price = o.销售信息.价格; return p_price >= decimal.Parse(price); }).ToList(); } else { var p = price.Split('-'); serchlist_temp = serchlist_temp.Where(o => { var p_price = o.销售信息.价格; return p_price >= decimal.Parse(p[0]) && p_price <= decimal.Parse(p[1]); }).ToList(); } } //////////////////////////////////////////////////////////////////////新增按价格查询 //////////////////////////////////////////////////////////////////////新增按地域查询 if (!string.IsNullOrWhiteSpace(province)) { serchlist_temp = serchlist_temp.Where(o => { var pro = o.所属地域.省份; return pro == province; }).ToList(); if (!string.IsNullOrWhiteSpace(city)) { serchlist_temp = serchlist_temp.Where(o => { var p_city = o.所属地域.城市; return p_city == city; }).ToList(); } } //////////////////////////////////////////////////////////////////////新增按地域查询 //对筛选后的集合进行分页处理 if (serchlist_temp.Any()) { int maxpage = Math.Max((serchlist_temp.Count + PAGESIZE - 1) / PAGESIZE, 1); int length = PAGESIZE; if (maxpage == page && serchlist_temp.Count % PAGESIZE != 0) { length = serchlist_temp.Count % PAGESIZE; } //进行分页处理后的数据 IList<商品查询> resultlist = new List<商品查询>(); //该页的起始索引 var count = (page - 1) * PAGESIZE; for (var i = count; i < count + length; i++) { resultlist.Add(serchlist_temp[i]); } //回传参数更改值 ViewData["商品搜索显示列表"] = resultlist; ViewData["pagecount"] = maxpage; ViewData["currentpage"] = page; ViewData["keyword"] = name; ViewData["筛选条件"] = condition; } } return PartialView("Part_Product/Part_ChangeProductClassByKeyword"); } catch { return Content("<script>alert('暂无搜索结果,将前往商品库进行查找!');window.location='/商品陈列/';</script>"); } }
public ActionResult ChangeProductSearch_pagechange(int? page) { if (-1 != HttpContext.检查登录()) { ViewData["已登录"] = "1"; } else { ViewData["已登录"] = "0"; } try { IList<商品查询> serchlist = new List<商品查询>();//该页显示的集合 TopDocs serchalllist = null; string name = Request.Params["name"]; if (!string.IsNullOrEmpty(name)) { serchalllist = SearchIndex("/Lucene.Net/IndexDic/Product", name);//满足该条件的总集合 } var listcount = serchalllist.totalHits > 1000 ? 1000 : serchalllist.totalHits; if (serchalllist != null && listcount > 0) { int maxpage = Math.Max((listcount + PAGESIZE - 1) / PAGESIZE, 1); if (string.IsNullOrEmpty(page.ToString()) || page < 0 || page > maxpage) { page = 1; } int length = PAGESIZE; if (maxpage == page && listcount % PAGESIZE != 0) { length = listcount % PAGESIZE; } int count = PAGESIZE * ((int)page - 1); //IndexSearcher search = new IndexSearcher(IndexDic("/Lucene.Net/IndexDic/Product"), true); IndexSearcher search = new IndexSearcher(new Lucene.Net.Store.SimpleFSDirectory(new System.IO.DirectoryInfo(IndexDic("/Lucene.Net/IndexDic/Product"))), true); Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("Name", name); for (int i = count; i < count + length; i++) { 商品查询 model = new 商品查询(); model.Id = long.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("NumId")); model.商品信息.商品名 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Name"); model.商品数据.商品简介 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Description"); model.商品信息.商品图片.Add(search.Doc(serchalllist.scoreDocs[i].doc).Get("Pic")); model.销售信息.价格 = decimal.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("Price")); model.商品信息.所属供应商.用户ID = long.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("Company")); model.基本数据.修改时间 = Convert.ToDateTime(search.Doc(serchalllist.scoreDocs[i].doc).Get("AddTime")); //新增按地域查找 model.所属地域.省份 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Province"); model.所属地域.城市 = search.Doc(serchalllist.scoreDocs[i].doc).Get("City"); //新增按地域查找 serchlist.Add(SetHighlighter(dic, model)); } ViewData["商品搜索显示列表"] = serchlist; ViewData["pagecount"] = maxpage; ViewData["currentpage"] = page; ViewData["keyword"] = name; ViewData["筛选条件"] = ""; } return PartialView("Part_Product/Part_ProductKeyword"); } catch { return Content("<script>alert('暂无搜索结果,将前往商品库进行查找!');window.location='/商品陈列/';</script>"); } }
/// <summary> /// 设置关键字高亮 /// </summary> /// <param name="dicKeywords">关键字列表</param> /// <param name="model">返回的数据模型</param> /// <returns></returns> private 商品查询 SetHighlighter(Dictionary<string, string> dicKeywords, 商品查询 model) { SimpleHTMLFormatter simpleHTMLFormatter = new PanGu.HighLight.SimpleHTMLFormatter("<font color=\"red\">", "</font>"); Highlighter highlighter = new PanGu.HighLight.Highlighter(simpleHTMLFormatter, new Segment()); highlighter.FragmentSize = 50; string strTitle = string.Empty; dicKeywords.TryGetValue("Name", out strTitle); if (!string.IsNullOrEmpty(strTitle)) { string title = highlighter.GetBestFragment(strTitle, model.商品信息.商品名); if (!string.IsNullOrEmpty(title)) model.商品信息.商品名 = title; } return model; }
public ActionResult Part_ProductSearch() { if (-1 != HttpContext.检查登录()) { ViewData["已登录"] = "1"; } else { ViewData["已登录"] = "0"; } try { //IMongoQuery proQ = null; ViewData["筛选条件"] = ""; ViewData["pagecount"] = 1; ViewData["currentpage"] = 1; ViewData["keyword"] = ""; TopDocs serchalllist = null; string name = Request.QueryString["name"]; if (!string.IsNullOrEmpty(name)) { serchalllist = SearchIndex("/Lucene.Net/IndexDic/Product", name); } IList<商品查询> serchlist = new List<商品查询>(); var listcount = serchalllist.totalHits > 1000 ? 1000 : serchalllist.totalHits; if (serchalllist != null && listcount > 0) { int page = 1; int maxpage = Math.Max((listcount + PAGESIZE - 1) / PAGESIZE, 1); int length = PAGESIZE; if (maxpage == page && listcount % PAGESIZE != 0) { length = listcount % PAGESIZE; } //IndexSearcher search = new IndexSearcher(IndexDic("/Lucene.Net/IndexDic/Product"), true); IndexSearcher search = new IndexSearcher(new Lucene.Net.Store.SimpleFSDirectory(new System.IO.DirectoryInfo(IndexDic("/Lucene.Net/IndexDic/Product"))), true); Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("Name", name); for (int i = 0; i < length; i++) { 商品查询 model = new 商品查询(); model.Id = long.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("NumId")); model.商品信息.商品名 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Name"); model.商品数据.商品简介 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Description"); model.商品信息.商品图片.Add(search.Doc(serchalllist.scoreDocs[i].doc).Get("Pic")); model.销售信息.价格 = decimal.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("Price")); model.商品信息.所属供应商.用户ID = long.Parse(search.Doc(serchalllist.scoreDocs[i].doc).Get("Company")); model.基本数据.修改时间 = Convert.ToDateTime(search.Doc(serchalllist.scoreDocs[i].doc).Get("AddTime")); //新增按地域查找 model.所属地域.省份 = search.Doc(serchalllist.scoreDocs[i].doc).Get("Province"); model.所属地域.城市 = search.Doc(serchalllist.scoreDocs[i].doc).Get("City"); //新增按地域查找 serchlist.Add(SetHighlighter(dic, model)); } ViewData["pagecount"] = maxpage; ViewData["currentpage"] = page; ViewData["keyword"] = name; } ViewData["商品搜索显示列表"] = serchlist; if (serchlist.Count > 0) { var productclass = 商品分类管理.查找分类(商品管理.查找商品(serchlist[0].Id).商品信息.所属商品分类.商品分类ID); var att = productclass.商品属性模板; ViewData["商品属性模板"] = att; ViewData["价格分段"] = productclass.价格分段; } //IList<商品> serchlist = new List<商品>(); //for (int i = 0; i < serchalllist.Count; i++) //{ // 商品 model = new 商品(); // model.Id = long.Parse(serchalllist[i].Id.ToString()); // model.商品信息.商品名 = serchalllist[i].商品信息.商品名; // model.商品信息.商品图片[0]= // model.商品数据.商品简介 = serchalllist[i].商品数据.商品简介; // model.销售信息.价格 = serchalllist[i].销售信息.价格; // model.商品信息.所属供应商.用户ID = serchalllist[i].商品信息.所属供应商.用户ID; // model.基本数据.修改时间 = Convert.ToDateTime(serchalllist[i].基本数据.添加时间); // serchlist.Add(model); //} //ViewData["商品搜索显示列表"] = serchalllist; //ViewData["listcount"] = serchalllist.Count; //ViewData["pagesize"] = PAGESIZE; return PartialView("Part_Product/Part_ProductSearch"); } catch { return Content("<script>alert('暂无搜索结果,将前往商品库进行查找!');window.location='/商品陈列/';</script>"); } }