微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lucene.Net 索引更新,当在 SQL 数据库中进行手动更改时 1) 了解哪些数据发生了变化2) 变更日志3) 将更改应用到 LuceneNet

如何解决Lucene.Net 索引更新,当在 SQL 数据库中进行手动更改时 1) 了解哪些数据发生了变化2) 变更日志3) 将更改应用到 LuceneNet

我是 Lucene.Net 的新手,目前正在进行研发以将其用于 .Net 应用程序。由于 Lucene.Net 是一个通用库,它与 sql Server、sqlite 等数据源无关。它只知道你有一个你想要索引的 Lucene 文档。所以当我们从任何数据源将数据转储到 Lucene.Net 时。我们如何使 Lucene.Net 文档更新为 sql 数据库中的数据(例如)。保持这两种数据(即(Lucene.Net 和 sql)同步)的一种方法是在每次数据库更新期间不断更新 Lucene 索引。我们也知道有人可以手动更改 sql 数据库在这种情况下我们如何更新 Lucene 索引?

解决方法

我可以提供有关如何执行此操作的概念性概述。从根本上说,您需要三样东西。

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

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

1) 了解哪些数据发生了变化

处理#1 的最简单方法是您的数据库是否支持插入、更新和删除触发器。如果是这样,那么您可以在向 LuceneNet 索引提供数据的每个表上添加这三个触发器,并且当这些表中的一个表中的记录发生更改时,触发器可以自动将一条记录写入更改日志,指示该表、记录 ID 和操作(插入、更新、删除)。如果您的数据库不支持触发器,那就有点难了。在执行插入、更新和删除操作时,您可以挂钩到应用程序用来与数据库通信的一些常见 API,并让该挂钩在更改日志中记录相同类型的信息。

2) 变更日志

更改日志可以有多种形式,但最简单的方法可能是在 sql 数据库中创建一个表。通过这种方式,插入、更新和删除触发器可以通过将记录插入到 changeLog 表中来直接记录它们的观察结果。如果您从 api 包装器写入它,将其显示为 sql 数据库表也可以工作。

3) 将更改应用到 LuceneNet

有很多方法可以实现这一点,但最可靠的方法可能是使用计时器启动后台线程,每隔几秒检查一次未处理的 changeLog 记录的存在。如果它找到这样的记录,它就会读入它们,检查它是用于插入、更新还是删除操作,以及用于哪个表和记录 ID。如果插入或更新,则从 sql 数据库中读取记录并在 LuceneNet 中插入或更新记录。如果为删除则直接删除LuceneNet中的记录。然后它在 changeLog 记录上设置一个布尔值以指示该记录已被处理。

可以添加更多花里胡哨的东西,但这应该让您非常清楚地了解如何实施一种方法来使 LuceneNet 索引近乎实时地保持最新状态。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。