为了说明我的要求,请考虑以下目录结构:
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(结果)
感谢您的帮助
答案 0 :(得分:0)
如果您生成索引一次或写入次数非常少,则可以在索引文档时设置解决方案。
因此,对于每个文档,您将保存另一个名为“path”的字段,并让它保存路径子元素中所有单词的标记化列表:
名称:C:\ Dev \ Projects
路径:C:,Dev,Projects,Test,Test Project,Test.cs,Foo,Foo.cs(使用你想要的任何标记器)
然后将该字段索引为INDEXED:true STORED:false并将其用于搜索匹配项:
查询:+路径:“Foo”
应该返回所有将Foo作为子元素的文档。 请记住,这种解决方案对于写入来说非常昂贵,对于一个非常大的树结构来说可能是不切实际的,在这种结构中你有数千个叶子。