使用Luceue.NET问题

来源:互联网 发布:天津光线网络 编辑:程序博客网 时间:2024/06/05 15:57
问题一:添加索引的时候问题。什么时候添加索引 什么时候删除索引就是当你点击添加商品的时候添加索引 当你点击删除商品的时候删除索引问题二:当多个用户对文件操作的时候怎么解决通过创建队列的方式 用到生产者和消费者模式生产者(用户)---仓库(队列)----消费者(线程)当用户发送一个请求要求添加一个商品的时候,这时就把用户添加商品的信息添加到一个队列中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然后把用户搜索的内容插入到searcherDetails2开始写数据访问层 业务逻辑层 表现层统计明细表中的记录 插入到汇总表中 怎么插入呢 要定时去插入到汇总表中 这里要用到第三方插件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()产生一个新的Guidinsert into (Id,KeyWord,number) select newid(),KeyWord,count(*) from SearchDetails where DateDiff(day,SearchDateTime,GetDate()<=7) group by KeyWord


原创粉丝点击