2012-03-02 92 views
1

我试图让一个应用程序,在C#.NET 4.0和WPF,即指标:Lucene.NET结构文件路径索引解决方案

  1. 文件名( “的TaskMgr.exe”)
  2. 文件说明( “Windows任务管理器”)
  3. 绝对父目录( “C:\ Windows \ System32下”)

在用户的计算机上的所有硬盘。

我没有索引文件的内容 - 只是文件名/路径/描述。另外请注意,我只索引扩展名为.DOC,.MP3,.EXE,.CS,.CPP的实用文件。我不会将无扩展文件,自定义扩展,DLL或其他类型的索引编入索引。

我对Lucene完全陌生,我已经阅读了一些关于如何设计文档/索引结构的初学者文章。

我在想我的Lucene文档结构可能是这样的,每个文件都是一个新文档,其中包含上面列出的三个字段作为三个关键对值。这是建议吗? Lucene是正确的选择吗?搜索文件名是否是实时的(列表可以没有太多滞后,动态扩展并与所有可能的文件名和路径进行契约)?

如果需要统计信息,我的硬盘是450 GB,并且我有681,014个(所有扩展名)文件和165,732个文件夹。

回答

1

这与Lucene完全相同;问题是:你的用户想要什么?如果他们搜索“任务”,它是否应该匹配名称,描述或父目录中的任何文件?如果是这样,那么这可能应该是一个领域。

您的用户是否希望更具体(例如filename:task)?如果是这样,那么你将需要单独的领域。

另外:您可能想要使用Solr。设置起来更容易,并且可以防止一些常见的陷阱。

+0

无法拥有网络应用 - 需要成为桌面应用。据我了解,这消除了Solr。 – Jason 2012-03-02 20:43:46

+0

你能否详细说明一下“如果它应该匹配其中的任何文件名称,描述或父目录,它应该都是一个字段?”我没有使用Lucene的经验,但我认为如果我输入了文件描述的一部分,Lucene可能会返回Document对象,从中我可以访问文件描述和文件路径。实际上,如果搜索与描述,名称或目录匹配,则需要返回文件。这必须是一个领域......? – Jason 2012-03-02 20:45:58

+0

您可以从许多方面访问Solr,包括[C#](http://code.google.com/p/solrnet/)。 Lucene查询是每个字段的,所以你可以让你的搜索为'filename:foo description:foo parent:foo',但如果你只有一个字段'everything',那么你的查询就是'everything:foo',它可能会更容易。无论哪种情况,您都将收回整个文档(只要字段已存储)。 – Xodarap 2012-03-03 13:50:38

1

这是一个rather old article与dotLucene(现在Lucene.net),但非常有用的新手编写Lucene桌面搜索应用程序。

注意:Lucene.net 3.0 API已经发生了很大的变化,所以只能将它作为指导。

+0

这是一个很好的资源,谢谢。 – Jason 2012-03-02 23:37:07