Apache Lucene - 优化搜索

时间:2014-01-20 08:42:40

标签: java spring apache lucene

我正在开发一个使用SQL Server数据库的Java(使用Spring)的Web应用程序。我使用Apache Lucene为我的Web应用程序实现搜索功能。使用Apache Lucene,在执行搜索之前,我创建了一个标题索引。我这样做是首先从数据库中获取所有标题的列表。然后我遍历标题列表并将其中的每一个添加到索引中。每次用户搜索某些内容时都会发生这种情况。

我想知道是否有更好,更有效的方法来创建索引?我知道我的方式非常低效,并且当标题列表很长时需要很长时间才能完成。

任何建议都将受到高度赞赏。

由于

2 个答案:

答案 0 :(得分:0)

你应该:

  1. 在开始申请之前制作Lucene索引
  2. 在数据库中添加/删除/更新标题时更新索引
  3. 这种方法的好处:

    1. 应用程序离线时的一个完整索引
    2. 增量索引,每次更改相关信息

答案 1 :(得分:0)

在优化Lucene之前:SQL Server已经具有full-text search功能。如果这涵盖了您的用例,请使用它。这是最简单的方法,因为SQL Server负责保持搜索索引与数据库同步。

如果SQL Server全文搜索不适合您的用例,那么您的应用程序必须创建自己的搜索索引并使其与数据库保持同步。要做到这一点,你应该:

  • 在您的应用程序启动时创建/更新搜索索引
  • 在应用程序插入,更新或删除标题时更新搜索索引

Lucene在存储搜索索引时非常灵活。您可以将其存储在文件系统或数据库中的目录中(或编写自己的存储提供程序)。我建议将它存储在文件系统中,因为性能比将其存储在数据库中要好得多。

如果您没有太多要编制索引的标题,您还可以使用每次应用程序启动时重新创建的内存中搜索索引。