我正在为项目使用关系数据库,并使用Solr将它们编入索引,以获得Solr提供的快速全文搜索。但与此同时,我需要用户能够按项目状态进行过滤,这当然是该用户特有的值。
ItemUserStatus值是项目,用户和状态之间的关联,因此它是一个不同的表。 所以我需要使用Solr的搜索功能,但需要在同一个查询中根据用户特定的信息进行过滤,这些信息对我来说似乎不可索引。
示例查询听起来像:给我一些标题为“标题”的项目,您已在“待处理”状态下设置。 我不确定这样做的最佳方式是什么,或者我使用的是正确的工具。
谢谢, 斯蒂芬
答案 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