Sql server Lucene和SQL Server-最佳实践

Sql server Lucene和SQL Server-最佳实践,sql-server,lucene,Sql Server,Lucene,我是Lucene的新手,所以想从你们这里得到一些帮助:) 背景:目前我的文档存储在SQL Server中,希望使用Lucene在SQL Server中对这些文档进行全文/标记搜索 Q1)在这种情况下,为了对文档进行关键字搜索,我是否应该将所有这些文档插入Lucene索引?这是否意味着会有数据重复(一个在SQL Server中,另一个在Lucene索引中?)这可能是一个问题,因为我们有大量的文档(大约100GB)。这是不可避免的吗 Q2)此外,每个文档都有一组标签(最多3个)。Lucene也是标签

我是Lucene的新手,所以想从你们这里得到一些帮助:)

背景:目前我的文档存储在SQL Server中,希望使用Lucene在SQL Server中对这些文档进行全文/标记搜索

Q1)在这种情况下,为了对文档进行关键字搜索,我是否应该将所有这些文档插入Lucene索引?这是否意味着会有数据重复(一个在SQL Server中,另一个在Lucene索引中?)这可能是一个问题,因为我们有大量的文档(大约100GB)。这是不可避免的吗

Q2)此外,每个文档都有一组标签(最多3个)。Lucene也是标签搜索的好选择?如果是,怎么做


谢谢,

文档也可以存储在Lucene中,您可以使用文档ID检索和引用它们

我建议在Lucene之上使用Solr,它更方便用户,并且默认情况下有多值字段(用于标记)


是的,通过Lucene提供全文搜索和通过传统数据库进行数据存储是一种受良好支持的体系结构,简单介绍一下。一个典型的实现是为您希望能够支持搜索的任何内容编制索引,在Lucene索引中只存储一个唯一标识符,并根据ID从数据库中提取通过搜索找到的任何记录。如果您想减少数据库负载,您可以在Lucene中存储一些信息以显示搜索结果列表,并且仅查询数据库以获取完整文档

至于节省空间,将有一定程度的重复。这是真的,即使你只是Lucene。Lucene将用于搜索的反向索引与存储的数据完全分开存储。为了节省空间,我建议您仔细考虑选择索引哪些数据,以及需要存储哪些数据,以便以后检索。存储的内容对于在Lucene中节省空间特别重要,因为在大多数情况下,仅索引的值往往非常节省空间

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

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

谢谢你的回答。那么,您认为仅在Lucene中维护文档是一种通用的体系结构吗?是否有在数据库和lucene中维护数据的案例?如果您只对实际内容和一些元数据感兴趣,我认为不需要额外的数据库。