Lucene和SQL Server - 最佳实践

11
我对Lucene还不太熟悉,希望得到你们的帮助 :)
背景:目前我在SQL Server中存储了一些文档,希望使用Lucene进行这些文档的全文和标签搜索。
Q1)在这种情况下,为了对文档进行关键字搜索,我应该将所有文档插入到Lucene索引中吗?这意味着会产生数据重复(一个在SQL Server中,一个在Lucene索引中吗?),由于我们有大量文档(约100GB),这可能是个问题。这是不可避免的吗?
Q2)此外,每个文档都有一组标签(最多3个)。Lucene也适合标签搜索吗?如果是,如何做到?
谢谢,
2个回答

10

是的,通过Lucene提供全文搜索和通过传统数据库进行数据存储是一种得到很好支持的架构。在这里看看,了解简要介绍。一个典型的实现方式是将您希望支持搜索的任何内容进行索引,并仅在Lucene索引中存储唯一标识符,根据ID从数据库中获取任何搜索到的记录。如果您想要减少数据库负载,可以在Lucene中存储一些信息以显示搜索结果列表,并仅查询数据库以获取完整文档。

至于节省空间,会有一定程度的重复。即使只使用Lucene也是如此。Lucene将用于搜索的倒排索引完全与存储的数据分开存储。为了节省空间,我建议您非常谨慎地选择要索引的数据以及需要存储和稍后检索的数据。对于节省Lucene空间而言,您存储的内容尤其重要,因为仅索引的值在大多数情况下都非常节省空间。

Lucene可以实现标签搜索。实现的简单方法是在构建文档时将每个标签添加到您选择的字段中(我将其称为“tags”,这似乎很有意义),例如:

document.add(new Field("tags", "widget", Field.Store.NO, Field.Index.ANALYZED));
document.add(new Field("tags", "forkids", Field.Store.NO, Field.Index.ANALYZED));

我可以简单地在任何查询中添加一个必需的术语,以仅搜索特定标签内的内容。例如,如果我要搜索“一些东西”,但只想在“forkids”标签中进行搜索,我可以编写以下查询:

some stuff +tags:forkids

1

谢谢你的回答。那么你认为仅在Lucene中维护文档是否是一种通用架构?有没有在数据库和Lucene中维护数据的情况? - soleiljy
如果您只对实际内容和一些元数据感兴趣,我认为没有必要使用额外的数据库。 - Elmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接