Neil McGuigan Asked: 2012-02-21 11:36:37 +0800 CST2012-02-21 11:36:37 +0800 CST 2012-02-21 11:36:37 +0800 CST 如何将数据库与外部全文引擎同步? 772 如何使外部全文引擎(Lucene、Solr 等)与数据库数据保持同步?例如,跟踪插入、删除、更新。 我当前的解决方案涉及对修改记录的大联合所有查询,Lucene 每隔几分钟就会轮询一次。 有更好的解决方案吗? 谢谢! full-text-search 2 个回答 Voted Brent Ozar 2012-05-08T04:03:44+08:002012-05-08T04:03:44+08:00 取决于您的数据库引擎。例如,在 Microsoft SQL Server 中,有几个数据库引擎功能可以跟踪哪些行已更改,然后您可以在定期查询中仅获取这些行。 我见过的另一种技术是在要搜索的表上添加一个 UpdatedDateTime 字段。使用当前日期/时间的默认值,并添加更新触发器,以便每当更新记录时,将 UpdatedDateTime 重置为当前日期/时间。请记住,您可能想要索引该字段,因为您将经常查询它。然后,在您的应用程序中,只需轮询已更新日期时间 > 上次更新时间的所有记录。 如果您采用后一种方法,您可能希望定期进行完整的重新填充,以捕获轮询应用程序在一段时间内失败的任何错误。 Best Answer Neil McGuigan 2012-08-12T19:00:38+08:002012-08-12T19:00:38+08:00 使用像 PostgreSQL 这样内置全文搜索的数据库。 使用 Hibernate 及其伙伴 Hibernate Search 之类的工具。当您在数据库中插入/更新/删除记录时,Hibernate Search 将为您插入/更新/删除您的 lucene 索引。
取决于您的数据库引擎。例如,在 Microsoft SQL Server 中,有几个数据库引擎功能可以跟踪哪些行已更改,然后您可以在定期查询中仅获取这些行。
我见过的另一种技术是在要搜索的表上添加一个 UpdatedDateTime 字段。使用当前日期/时间的默认值,并添加更新触发器,以便每当更新记录时,将 UpdatedDateTime 重置为当前日期/时间。请记住,您可能想要索引该字段,因为您将经常查询它。然后,在您的应用程序中,只需轮询已更新日期时间 > 上次更新时间的所有记录。
如果您采用后一种方法,您可能希望定期进行完整的重新填充,以捕获轮询应用程序在一段时间内失败的任何错误。
使用像 PostgreSQL 这样内置全文搜索的数据库。
使用 Hibernate 及其伙伴 Hibernate Search 之类的工具。当您在数据库中插入/更新/删除记录时,Hibernate Search 将为您插入/更新/删除您的 lucene 索引。