使用Luceue.NET问题

问题一:添加索引的时候问题。什么时候添加索引 什么时候删除索引
就是当你点击添加商品的时候添加索引 当你点击删除商品的时候删除索引
问题二:当多个用户对文件操作的时候怎么解决
通过创建队列的方式 用到生产者和消费者模式
生产者(用户)---仓库(队列)----消费者(线程)
当用户发送一个请求要求添加一个商品的时候,这时就把用户添加商品的信息添加到一个队列中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








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值