Lucene 是否可以监控 Sql 表并保持自身更新?

问题描述

我想了解全文搜索引擎 Lucene 的一些基础知识。更具体地说,我正在查看 Lucene.Net。

今天我有一个旧的旧版 .NET 4.8 Web 应用程序。有些是 MVC,但较新的部分遵循非常好的 API 优先模式。该应用程序拥有大量不同领域的记录(50 万应用程序)。至少可以说,那里的搜索功能已经过时了。大量旧的 Linq2sql 查询在类似查询中散出。

我想介绍一种新的更好的记录搜索方式,所以我开始关注 Lucene.Net。但我试图理解一个关键概念,我似乎无法在任何地方找到答案,我认为可能是因为它无法完成,但我想确定一下。

是否可以设置 Lucene 来监视 sql 表或视图,这样我就不必在我的代码中维护 Lucene 索引。当添加、更改或删除内容时,此应用程序的代码无法轻松保持 Lucene 索引的更新。但是数据库是很好的事实来源。我可以忍受更新索引的小延迟。但基本上我想为每个业务模型定义哪些字段是索引的一部分以及 id 是什么,然后能够从我的 Web 应用程序的 C# 服务器端代码中使用该索引进行查询

这种情况是否可能发生,还是我要求的太多了?

解决方法

这是完全可能的,但不是开箱即用的。如果你想要它,你必须实现它。从根本上说,您需要实现三件事。

  1. 每次sql数据库中相关数据发生变化时的一种获知方式
  2. 一个用于捕获有关该更改的信息的地方,称为更改日志。
  3. 读取更改日志的例程,将这些更改应用于

LuceneNet 索引并标记更改日志中的记录已处理。

当然有很多不同的方法来处理每一种。

此 SO 答案 Lucene.Net index updates,when a manual change is done in SQL Database 提供了有关实现此目的的一种方式的更多详细信息。