我正在使用使用SQL Server数据库的Java(使用Spring)开发Web应用程序。我使用Apache Lucene为我的Web应用程序实现搜索功能。使用Apache Lucene,在进行搜索之前,我会创建标题索引。我首先从数据库中获取所有标题的列表来做到这一点。然后,我循环浏览标题列表,然后将它们添加到索引中。每当用户搜索某些东西时,都会发生这种情况。
我想知道是否有一种更好,更有效的创建索引的方法?我知道我的方式非常低效,当标题列表非常长时,将需要很长时间才能完成。
任何建议都将不胜感激。
谢谢
在优化Lucene:SQL Server之前已经具有完整的搜索功能。如果涵盖了您的用例,请使用它。这是最简单的方法,因为SQL Server负责将搜索索引与数据库同步。
如果SQL Server全文搜索不符合您的用例,则您的应用程序必须创建自己的搜索索引并与数据库保持同步。为此,您应该:
- 当您的应用程序启动时,创建/更新搜索索引
- 当应用程序插入,更新或删除标题 时,更新搜索索引
Lucene在存储搜索索引的地方很灵活。您可以将其存储在文件系统或数据库中(或编写自己的存储提供商)中。我建议将其存储在文件系统中,因为性能要比将其存储在数据库中时要好得多。
如果您没有太多的标题来索引,您也可以使用内存搜索索引,每次启动应用程序时都会重新创建该索引。
您应该:
- 在开始申请之前制作Lucene索引
- 更新索引在数据库中添加/删除/更新标题
这种方法的好处:
- 应用程序脱机时一个完整索引
- 增量索引,每次更改相关信息