问题一:添加索引的时候问题。什么时候添加索引 什么时候删除索引 就是当你点击添加商品的时候添加索引 当你点击删除商品的时候删除索引 问题二:当多个用户对文件操作的时候怎么解决 通过创建队列的方式 用到生产者和消费者模式 生产者(用户)---仓库(队列)----消费者(线程) 当用户发送一个请求要求添加一个商品的时候,这时就把用户添加商品的信息添加到一个队列中Queue<需要显示信息的内容> queue=new Queue(需要显示信息的内容); 修改操作跟添加一样 删除的时候,也把要删除的信息添加到队列中 同时定义一个标志 添加有添加的标志 线程监听队列问题 //创建线程 监听队列信息 public void StartThread() { Thread thread = new Thread(ListenIndex); //设置为后台线程 thread.IsBackground = true; thread.Start(); } //创建一个索引不停的去监听索引的创建 public void ListenIndex() { while (true) { //判断队列中是否有数据 如果没有就让它休息5秒 if (queue.Count > 0) { //添加索引 try { InsertIndex(); } catch (Exception) { throw; //这里就记录日志错误里面 } } else { Thread.Sleep(5000);//睡眠5分钟 如果没有设置睡眠5分钟那么就可能 } } } 搜索怎么让文本框显示最热的几条信息 首先在数据库中创建2张表 一张表就是汇总表,就是显示 ID KeyWord(搜索的关键字) number(搜索的次数) 还有一张表就是用来统计搜索的次数的表 就是当你输入关键字的时候往数据库中插入数据 表字段 明细表 Id(这个不要弄成自动增长用Guid) Keyword(关键字) SearchDateTime(搜索时间) 为什么不用自动增长 因为数据库要还要根据上一条记录来计算 这还用到锁这样效率相对不高 1然后把用户搜索的内容插入到searcherDetails 2开始写数据访问层 业务逻辑层 表现层 统计明细表中的记录 插入到汇总表中 怎么插入呢 要定时去插入到汇总表中 这里要用到第三方插件Quartz.Net 就是下面一段代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Quartz; using Quartz.Impl; namespace BookShop.Web.LuceneSearcher { public sealed class QuartzClass { private readonly static QuartzClass quartz = new QuartzClass(); private QuartzClass() { } public static QuartzClass CreateInstance() { return quartz; } public void Start() { //每隔一段时间执行任务 IScheduler sched; ISchedulerFactory sf = new StdSchedulerFactory(); sched = sf.GetScheduler(); JobDetail job = new JobDetail("job1", "group1", typeof(IndexJob));//IndexJob为实现了IJob接口的类 DateTime ts = TriggerUtils.GetNextGivenSecondDate(null, 5);//5秒后开始第一次运行 TimeSpan interval = TimeSpan.FromSeconds(5);//每隔1小时执行一次 Trigger trigger = new SimpleTrigger("trigger1", "group1", "job1", "group1", ts, null, SimpleTrigger.RepeatIndefinitely, interval);//每若干小时运行一次,小时间隔由appsettings中的IndexIntervalHour参数指定 sched.AddJob(job, true); sched.ScheduleJob(trigger); sched.Start(); } } } IndexJob 这个类就是接下来我们的工作必须要实现IJob接口的类 public class IndexJob:IJob { /// <summary> /// 定义完成的工作必须放在该方法中。 /// </summary> /// <param name="context"></param> public void Execute(JobExecutionContext context) { BLL.keyWordsRankManager bll = new BLL.keyWordsRankManager(); bll.Delete(); bll.Insert(); 这里就是我们要完成的工作 把得到的关键字添加到数据库中 } } 接下来就是把明细表中的数据往汇总表中插入 先把原来的统计表中的数据,然后再将最新统计的结果插入到该表 插入语句:newid()产生一个新的Guid insert into (Id,KeyWord,number) select newid(),KeyWord,count(*) from SearchDetails where DateDiff(day,SearchDateTime,GetDate()<=7) group by KeyWord
使用Luceue.NET问题
最新推荐文章于 2020-08-24 22:46:48 发布