结合Lucene.NET和关系数据库的最佳实践?

Fly*_*wat 5 lucene.net

我正在开发一个项目,我将拥有大量数据,并且可以通过几种非常有效表达为SQL查询的表单进行搜索,但也需要通过自然语言处理进行搜索.

我的计划是使用Lucene为这种搜索形式建立一个索引.

我的问题是,如果我这样做并执行搜索,Lucene将返回索引中匹配文档的ID,然后我必须从关系数据库中查找这些实体.

这可以通过两种方式完成(到目前为止我能想到):

  • N次查询(可怕)
  • 立即将所有ID传递给存储过程(也许作为逗号分隔参数).这具有限制为最大参数大小的缺点,以及UDF将字符串拆分为临时表的缓慢性能.

我几乎想把所有内容镜像到lucenes索引,这样我就可以从后备存储中定期生成索引,但只需要为前端访问它.

建议吗?

Szt*_*upY 2

当我遇到这个问题时,我选择了具有全文搜索功能的关系数据库(我使用了 PostgreSQL 8.3,它内置了 ft 支持,具有词干提取和同义词库支持)。这样数据库就可以同时使用SQL和ft命令进行查询。缺点是您需要一个具有全文搜索功能的数据库,而这些功能可能不如 lucene 所能做到的。