这里我的的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,如下:
二、Demo结构如下:
三、代码如下:
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; } } }