我可以使用Lucene.net来索引和加入来自多个来源的结果

时间:2011-11-14 22:48:03

标签: lucene.net

我想使用Lucene.net来索引来自各种来源(例如本地文件系统和数据库)的数据。但是,我想链接来自两个来源的数据(基于公共字段,例如ID),并将组合信息显示给用户。据我所知,我有三种选择。索引每个来源后:

  1. 使用Lucene.net将搜索查询中的索引合并为单个结果集
  2. 创建一些自定义代码以追溯关联结果;或
  3. 将单独的结果集存储在数据库中(在我的情况下,它与源不是同一个数据库)。然后基于连接数据的查询创建新索引
  4. 选项1是我想要做的,但我不确定Lucene的可行性有几个原因:

    • Lucene不是一个关系型数据库,是否尝试过Lucene并不是真正想做的事情?
    • 组合索引会导致明显的性能损失吗?

    我选择2的唯一原因是,如果我相信我可以创建一个比选项1更有效的算法。遵循这条逻辑线,我必须质疑我是否应该使用Lucene关联数据。

    这引导我进入选项3.我很高兴它会起作用,但这似乎是一种妥协:

    • 数据将存储在数据库以及Lucene(以及原始来源)
    • 通过引入额外步骤,完成此过程需要更长时间。我不确定这会如何影响用户体验

    有什么建议吗?

1 个答案:

答案 0 :(得分:5)

是的,你可以,但你需要停止思考关系并开始考虑文档而不是行。或者,选项3是正确的方法。你想要做的是创建一个文件:

a)无论我想搜索什么 - 用lucene术语分析的字段
b)指向完整的,现存的记录 - 基本上是ID号或文件位置
c)如果可能的话,有足够的东西来显示搜索结果,而不必以lucene的说法与文件系统或数据库存储的字段联系。

在性能方面,不会有太多开销或过载。动态地向索引添加内容并不是一个很大的性能影响,而且lucene本身的速度非常快。我会以合理的,组件化的方式构建它,然后在需要时深入了解性能。