按用户特定数据过滤,但也使用像Solr这样的搜索引擎

时间:2011-05-15 20:24:25

标签: database solr nosql relational-database

我正在为项目使用关系数据库,并使用Solr将它们编入索引,以获得Solr提供的快速全文搜索。但与此同时,我需要用户能够按项目状态进行过滤,这当然是该用户特有的值。

ItemUserStatus值是项目,用户和状态之间的关联,因此它是一个不同的表。 所以我需要使用Solr的搜索功能,但需要在同一个查询中根据用户特定的信息进行过滤,这些信息对我来说似乎不可索引。

示例查询听起来像:给我一些标题为“标题”的项目,您已在“待处理”状态下设置。 我不确定这样做的最佳方式是什么,或者我使用的是正确的工具。

谢谢, 斯蒂芬

2 个答案:

答案 0 :(得分:0)

在设计Solr架构时,您需要denormalize/flatten your data。在这种情况下,您似乎正在搜索“项目”,因此架构将围绕项目。填充Solr索引时,您将有一个字段“Title”和另一个动态字段“State”,因此您的查询将像Title:something State_123:Pending一样简单,其中123是用户ID。

答案 1 :(得分:0)

看看RavenDB。它是一个建立在Lucene之上的面向文档的数据库,因此您可以获得Solr和数据库的混合体,但它不是搜索引擎,而是具有全文搜索功能的全功能文档数据库。支持文本字段。

为您的示例查询RavenDB的Linq表达式将是:

from doc in docs
where doc.Title == "Title" && doc.State == DocState.Pending
select doc