这里我的的Demo的逻辑是这样的:首先我基本的数据是储存在Sql数据库中,然后我把我的必需的数据推送到MongoDB中,这样再去利用Lucene.net+盘古创建索引;其中为什么要这样把数据推送到MongoDb中,我的理解是可以从Sql中直接取出来必需的数据,首次推送可能是要推送所有的数据,直接创建索引,但是在第二次推送的时候,可能存在要修改或者新增的数据,这样我们就需要一个中间表,而这个中间表我们是使用的MongoDB文件型存储来处理啦,而没在sql数据库中在建立一张表,我是这么理解的。。。大体上的逻辑是这样的,下面简单写一个实现的逻辑。

          细微的说下程序的逻辑如下:

          1、第一次推数据,把所有的数据推送到mongo,而且第一次搜索的话只能在元数据的list上取数据建立索引
          2、第二次推数据:首先对比mongo,如果mongo里面有要新增或者修改的数据,更新mongo,然后再推送lucene中

          查询数据:1、如果查询出来的list为空,则从第三方查询,分别有2个链接,如果为空则为空,如果不为空,则查询出来的数据存放在MongoDB,推送Lucene.net中即可。

         一、准备工作

         首先我这里创建了一个控制台程序,然后引用在NuGet包中添加如下需要安装的dll,如下:

                          使用Lucene.net+盘古分词实现搜索查询 使用Lucene.net+盘古分词实现搜索查询

                          使用Lucene.net+盘古分词实现搜索查询

                         二、Demo结构如下: 

                         使用Lucene.net+盘古分词实现搜索查询

                         三、代码如下:

                         1、Helper文件夹下的BizLogger如下:

using NLog;
using System;

namespace LuceneNetTest
{
    /// <summary>
    /// 业务日志记录器
    /// </summary>
    public class BizLogger
    {
        protected Logger _Logger { get; set; }

        public static BizLogger Default { get; protected set; }

        protected BizLogger(Logger logger)
        {
            this._Logger = logger;
        }

        public BizLogger(string name) : this(LogManager.GetLogger(name)) { }

        /// <summary>
        /// 静态构造函数
        /// </summary>
        static BizLogger()
        {
            Default = new BizLogger(LogManager.GetCurrentClassLogger());
        }

        public void Debug(string message, params object[] args)
        {
            this._Logger.Debug(this.getMessage(message), args);
        }

        public void Info(string message, params object[] args)
        {
            this._Logger.Info(this.getMessage(message), args);
        }

        public void Trace(string message, params object[] args)
        {
            this._Logger.Trace(this.getMessage(message), args);
        }

        public void Error(string message, params object[] args)
        {
            this._Logger.Error(this.getMessage(message), args);
        }

        public void Fatal(string message, params object[] args)
        {
            this._Logger.Fatal(this.getMessage(message), args);
        }

        public void Debug(Exception exception, string message, params object[] args)
        {
            this._Logger.Log(LogLevel.Debug, exception, this.getMessage(message), args);
        }

        public void Info(Exception exception, string message, params object[] args)
        {
            this._Logger.Log(LogLevel.Info, exception, this.getMessage(message), args);
        }

        public void Trace(Exception exception, string message, params object[] args)
        {
            this._Logger.Log(LogLevel.Trace, exception, this.getMessage(message), args);
        }

        public void Error(Exception exception, string message, params object[] args)
        {
            this._Logger.Log(LogLevel.Error, exception, this.getMessage(message), args);
        }

        public void Fatal(Exception exception, string message, params object[] args)
        {
            this._Logger.Log(LogLevel.Fatal, exception, this.getMessage(message), args);
        }

        protected virtual string getMessage(string message)
        {
            return message;
        }
    }
}
View Code

相关文章: