public AnsInfo SearchforCache(SearchInfo Searchwords)
        {
            AnsInfo ai = new AnsInfo();

            Xapian.MSet xm = new Xapian.MSet();
            XapianLogic xl = new XapianLogic();

            if (Searchwords.filter == 5)    //sec, not cache
            {
                List <SearchResult> ls = new List <SearchResult>();
                uint num = 0;
                xl.SearchforsecReturn(Searchwords.SearchString, Searchwords.page, Searchwords.filter, Searchwords.filetype, out num, out ls);
            }
            else
            {
                xl.SearchReturnforSilo(Searchwords.SearchString, Searchwords.filter, Searchwords.filetype, out xm);
                SearchReturn(xm, Searchwords, out ai);
                string search = Searchwords.SearchString + "&" + Searchwords.page + "&" + Searchwords.filter + "&" + Searchwords.filetype;
                cache.Put(search, ai);
            }
            return(ai);
        }
        public ActionResult Result(string search, string filter, string page)
        {
            TimeSpan ts;
            List <XapianLogic.SearchResult> XapAns;
            bool   urlflag      = false;
            string searchbackup = search;

            //角色等级不同
            switch (filter)
            {
            case null:
                if (User.IsInRole("Admin") || User.IsInRole("Sec"))
                {
                    filter = "5";           //管理员和等级不同用户检索就是全部可见的
                }
                else
                {
                    filter = "0";           //非管理员检索结果不可见等级不同
                }
                break;

            case "0":
                if (User.IsInRole("Admin") || User.IsInRole("Sec"))
                {
                    filter = "5";           //管理员和等级不同用户检索就是全部可见的
                }
                break;

            case "1":
                break;

            case "2":
                break;

            case "3":
                break;

            case "4":
            case "5":
                if (!User.IsInRole("Admin") && !User.IsInRole("Sec"))
                {
                    log.Warn("用户" + User.Identity.Name + "恶意访问!!");
                    filter = "0";
                }
                break;

            default:
                filter = "0";
                break;
            }
            //分页
            if (page == null)
            {
                page = "0";
            }
            ViewBag.Page   = page;
            ViewBag.Filter = filter;

            if (string.IsNullOrEmpty(search))
            {
                //如果没有词检索就返回
                return(RedirectToAction("Index"));
            }
            else
            {
                if (IsUrl(search))
                {
                    urlflag = true;
                    search  = Regex.Replace(search, @"/", " ");
                }

                //分词处理
                ViewBag.SearchWord = searchbackup;
                XapianLogic xl  = new XapianLogic();
                uint        num = 0;
                if (urlflag)
                {
                    xl.SearchReturn(searchbackup, int.Parse(page), int.Parse(filter), "1980/01/01", out num, out XapAns, out ts);
                }
                else
                {
                    //如果是Ftp和共享文件夹的来源,支持用+fileextension:excel、word、ppt、pdf、txt、html,查找过滤
                    //if ((filter == "2" || filter == "3")&&search.Contains("+fileextension"))
                    if (search.Contains("+fileextension"))
                    {
                        int    pos           = search.IndexOf("+fileextension"); //若有使用扩展名检索,则筛选扩展名
                        string extension     = search.Substring(pos + 15, search.Length - pos - 15);
                        string searchkeyword = search.Substring(0, pos);
                        xl.SearchReturn(searchkeyword, int.Parse(page), int.Parse(filter), extension, out num, out XapAns, out ts); //带有扩展名检索
                    }
                    else
                    {
                        xl.SearchReturn(search, int.Parse(page), int.Parse(filter), "0", out num, out XapAns, out ts);  //无扩展名检索
                    }
                }


                if (num == 0)
                {
                    //如果没有检索到结果
                    ViewBag.ZeroCheck = "0";
                    TempData["Zero"]  = "内容未检索到!";
                    ViewBag.Ansnum    = 0;
                    ViewBag.PageCount = 0;
                    ViewBag.time      = ts;
                    return(View());
                }
                else
                {
                    ViewBag.AnsNum = num;
                }
                //检索到则返回结果
                ViewBag.WebContent = XapAns;
                ViewBag.PageCount  = (uint)Math.Ceiling(num / 10.0);
                //检索所用时间
                ViewBag.time = ts;
                return(View());
            }
        }
        public int GetUserSubandPush()
        {
            //用户Email和邮件内容
            string useremail   = "";
            string mailcontent = "";
            //在数据库中读取角色与用户信息
            var context = new ApplicationDbContext();
            List <ApplicationUser> allUsers = context.Users.ToList();
            var roleManager = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(new ApplicationDbContext()));
            //获得管理员角色
            ICollection <IdentityUserRole> Adminrole = roleManager.FindByName("Admin").Users;
            //获得等级不同角色
            ICollection <IdentityUserRole> Secrole = roleManager.FindByName("Sec").Users;

            foreach (var item in allUsers)  //轮询用户
            {
                int  sec  = 0;
                bool flag = false;
                useremail = item.Email;
                if (useremail == "*****@*****.**" || item.EmailConfirmed == false)
                //if (item.EmailConfirmed == false)
                {
                    continue;
                }


                foreach (var rolea in Adminrole)                      //是否管理员
                {
                    var find = string.Compare(rolea.UserId, item.Id); //依次查询
                    if (find == 0)
                    {
                        sec  = 1;       //若管理员,则等级不同
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    foreach (var rolea in Secrole)                        //是否等级不同
                    {
                        var find = string.Compare(rolea.UserId, item.Id); //依次查询
                        if (find == 0)
                        {
                            sec = 1;    //若等级不同,则终止
                            break;
                        }
                    }
                }

                string        id = item.Id;
                UserSubscribe us = new UserSubscribe();
                XapianLogic   xl = new XapianLogic();
                List <UserSubscribe.SubStruct> lus = new List <UserSubscribe.SubStruct>();
                string str = CrawlConfigValue + id + @".config";
                us.ShowSubXml(str, out lus);         //查看该用户是否有订阅
                if (lus.Count == 0)
                {
                    continue;
                }
                else
                {
                    foreach (var word in lus)
                    {
                        string tmp = xl.SearchForPush(word.SearchWord, sec, word.AddTime);  //检查数据库内容
                        if (tmp != null || tmp != "")
                        {
                            mailcontent = mailcontent + tmp;    //获取内容更新
                        }
                    }
                }
                us.UpdateSubNodeonlytime(str);      //更新订阅查询时间
                if (mailcontent == "")              //检查是否有内容,无内容不推送
                {
                    Console.WriteLine("no update");
                    continue;
                }
                PushFunction.PushFunction ppf = new PushFunction.PushFunction();
                ppf.GetInfandPush(useremail, mailcontent);  //按照用户邮箱和内容推送
            }
            return(1);
        }
Ejemplo n.º 4
0
        public async Task <ActionResult> Result(string search, string filter, string page)
        {
            if (search == "我想玩旅行商问题的游戏上上下下左右左右BABA")
            {
                return(View("Amazing"));
            }
            TimeSpan            ts;
            DateTime            DateTimestart = DateTime.Now;
            DateTime            DateTimeend;
            List <SearchResult> XapAns;
            bool   urlflag      = false;
            string searchbackup = search;

            //角色等级
            switch (filter)
            {
            case null:
                if (User.IsInRole("Admin") || User.IsInRole("Sec"))
                {
                    filter = "0";           //管理员和等级用户检索就是全部可见的
                }
                else
                {
                    filter = "0";           //非管理员检索结果不可见等级
                }
                break;

            case "0":
                if (User.IsInRole("Admin") || User.IsInRole("Sec"))
                {
                    filter = "0";           //管理员和等级用户检索就是全部可见的
                }
                break;

            case "1":
                break;

            case "2":
                break;

            case "3":
                break;

            case "4":
            case "5":
                if (!User.IsInRole("Admin") && !User.IsInRole("Sec"))
                {
                    log.Warn("用户" + User.Identity.Name + "恶意访问!!");
                    filter = "0";
                }
                break;

            default:
                filter = "0";
                break;
            }
            //分页
            if (page == null)
            {
                page = "0";
            }
            ViewBag.Page   = page;
            ViewBag.Filter = filter;

            if (string.IsNullOrEmpty(search))
            {
                //如果没有词检索就返回
                return(RedirectToAction("Index"));
            }
            else
            {
                if (IsUrl(search))
                {
                    urlflag = true;
                    search  = Regex.Replace(search, @"/", " ");
                }

                //分词处理
                ViewBag.SearchWord = searchbackup;
                XapianLogic xl  = new XapianLogic();
                uint        num = 0;
                if (urlflag)
                {
                    var        guid        = GetGuid();
                    var        searchgrain = GrainClient.GrainFactory.GetGrain <ISearchGrain>(guid);
                    SearchInfo si          = new SearchInfo
                    {
                        SearchString = searchbackup,
                        filter       = int.Parse(filter),
                        page         = int.Parse(page),
                        filetype     = "1980/01/01"
                    };
                    Console.WriteLine(guid + "\n");
                    AnsInfo ai = searchgrain.SearchAns(si).Result;
                    Console.WriteLine(guid + "ret" + "\n");
                    //xl.SearchReturn(searchbackup, int.Parse(page), int.Parse(filter),"1980/01/01", out num, out XapAns, out ts);
                    num         = ai.totalnum;
                    XapAns      = ai.retinfo;
                    DateTimeend = DateTime.Now;
                    ts          = DateTimeend - DateTimestart;
                    ts.TotalMilliseconds.ToString();        //查询时间返回
                }
                else
                {
                    //如果是Ftp和共享文件夹的来源,支持用+fileextension:excel、word、ppt、pdf、txt、html,查找过滤
                    //if ((filter == "2" || filter == "3")&&search.Contains("+fileextension"))
                    var guid = GetGuid();
                    Console.WriteLine(guid + "\n");
                    //var searchgrain = GrainClient.GrainFactory.GetGrain<ISearchGrain>(guid);
                    Console.WriteLine(guid + "ret" + "\n");
                    SearchInfo si = new SearchInfo
                    {
                        SearchString = searchbackup,
                        filter       = int.Parse(filter),
                        page         = int.Parse(page)
                    };

                    if (search.Contains("+fileextension"))
                    {
                        int    pos           = search.IndexOf("+fileextension"); //若有使用扩展名检索,则筛选扩展名
                        string extension     = search.Substring(pos + 15, search.Length - pos - 15);
                        string searchkeyword = search.Substring(0, pos);
                        si.filetype = extension;
                        //xl.SearchReturn(searchkeyword, int.Parse(page), int.Parse(filter), extension, out num, out XapAns, out ts); //带有扩展名检索
                        AnsInfo ai = new AnsInfo();
                        ai = await SearchAns(si, guid);

                        num         = ai.totalnum;
                        XapAns      = ai.retinfo;
                        DateTimeend = DateTime.Now;
                        ts          = DateTimeend - DateTimestart;
                        ts.TotalMilliseconds.ToString();        //查询时间返回
                    }
                    else
                    {
                        si.filetype = "0";
                        AnsInfo ai = new AnsInfo();
                        ai = await SearchAns(si, guid);

                        //xl.SearchReturn(search, int.Parse(page), int.Parse(filter), "0", out num, out XapAns, out ts);  //无扩展名检索
                        num         = ai.totalnum;
                        XapAns      = ai.retinfo;
                        DateTimeend = DateTime.Now;
                        ts          = DateTimeend - DateTimestart;
                        ts.TotalMilliseconds.ToString();        //查询时间返回
                    }
                }


                if (num == 0)
                {
                    //如果没有检索到结果
                    ViewBag.ZeroCheck = "0";
                    TempData["Zero"]  = "内容未检索到!";
                    ViewBag.Ansnum    = 0;
                    ViewBag.PageCount = 0;
                    ViewBag.time      = ts;
                    return(View());
                }
                else
                {
                    ViewBag.AnsNum = num;
                }
                //检索到则返回结果
                ViewBag.WebContent = XapAns;
                ViewBag.PageCount  = (uint)Math.Ceiling(num / 10.0);
                //检索所用时间
                ViewBag.time = ts;
                return(View());
            }
        }