2009-07-20 38 views
0

我正在建立一个学习pruposes的网站,我正在看lucene.net 作为我的内容的全文索引器,但我有一些问题。假设我有一个层次结构(n级)的类别,以及分配给一个类别的文章(1个cat - > n篇文章)。 使用简单的RDB可以非常容易地搜索某个类别或其任何子类别下的文章。但我努力想要 想象如何使用lucene构建这种查询。选择我认为可能的工作:Lucene.net的新手,最好的方法来解决复杂的查询?

Suposing我是idexing“标题,文字,类别”的每一篇文章,其中一个方案是先获取列表从DB的每个子类别 的ID的,然后搜索与lucene在列表中。

其他选项可能是在lucene中将字段的整个类别“路径”编入索引。像“标题”,“文本”,“catparent1,catparent2,catparent3,类别”?

用复杂的关系过滤器进行这种查询时,最好的办法是什么? (不仅仅是文本搜索)

回答

4

添加类路径作为索引字段,并使用词组搜索来搜索它:

ID  Title    Categories 

"MyDoc1", "Hello world!", "/programming/beginner/samples" 
"MyDoc2", "Prove that P=NP", "/programming/advanced/samples" 

现在你可以用短语搜索分层查询类:

"/programming/beginner" 

或不分级使用词搜索:

"samples" 

我用这个见面用它们的路径名索引文件 - 你可以查询"dirname""parent/child""/root/parent/child",它可以很好地工作。

您可以通过包含或不包含前导斜杠来控制搜索是否从根开始。

就“复杂关系过滤器”而言,您可以使用布尔查询将这些类别搜索与其他搜索和过滤器结合使用。