是否可以在一个查询中获取匹配的文档及其所有祖先?

时间:2010-09-08 18:26:25

标签: lucene lucene.net

为了说明我的要求,请考虑以下目录结构:

C:\开发
C:\开发\项目
C:\ Dev \ Projects \ Test Project
C:\ Dev \ Projects \ Test Project \ Test.cs
C:\开发\项目\富
C:\ Dev \ Projects \ Foo \ foo.cs(包含单词test)

基本文档将包含id,type,name和content字段,其中type将是文件或文件夹,名称将是ether文件名或文件夹名。

在搜索“测试”时,我应该得到:

C:\ Dev(结果的祖先)
C:\ Dev \ Projects(结果的祖先)
C:\ Dev \ Projects \ Test Project(结果)
C:\ Dev(结果的祖先)
C:\ Dev \ Projects(结果的祖先)
C:\ Dev \ Projects \ Test Project(结果的祖先)
C:\ Dev \ Projects \ Test Project \ Test.cs(result)
C:\ Dev(结果的祖先)
C:\ Dev \ Projects(结果的祖先)
C:\ Dev \ Projects \ Foo(结果的祖先)
C:\ Dev \ Projects \ Foo \ foo.cs(结果)

如果可以避免重复,那就更好了:

C:\ Dev(结果的祖先)
C:\ Dev \ Projects(结果的祖先)
C:\ Dev \ Projects \ Test Project(结果)
C:\ Dev \ Projects \ Test Project \ Test.cs(result)
C:\ Dev \ Projects \ Foo(结果的祖先)
C:\ Dev \ Projects \ Foo \ foo.cs(结果)

在搜索“项目”时,我应该:

C:\ Dev(结果的祖先)
C:\ Dev \ Projects(结果的祖先)
C:\ Dev \ Projects \ Test Project(结果)

在搜索“foo”时,我应该得到:

C:\ Dev(结果的祖先)
C:\ Dev \ Projects(结果的祖先)
C:\ Dev \ Projects \ Foo(结果) C:\ Dev \ Projects \ Foo \ foo.cs(结果)

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果您生成索引一次或写入次数非常少,则可以在索引文档时设置解决方案。

因此,对于每个文档,您将保存另一个名为“path”的字段,并让它保存路径子元素中所有单词的标记化列表:

名称:C:\ Dev \ Projects
路径:C:,Dev,Projects,Test,Test Project,Test.cs,Foo,Foo.cs(使用你想要的任何标记器)

然后将该字段索引为INDEXED:true STORED:false并将其用于搜索匹配项:

查询:+路径:“Foo”

应该返回所有将Foo作为子元素的文档。 请记住,这种解决方案对于写入来说非常昂贵,对于一个非常大的树结构来说可能是不切实际的,在这种结构中你有数千个叶子。