帮助搜索引擎架构.NET C#。

3
我正在尝试为特定精神团体的所有文学作品(书籍、文章等)、音乐和视频创建搜索引擎。当输入一个关键词时,我希望显示所有包含该关键词的PDF文章链接,以及所有用该关键词标记的音乐文件和视频文件。用户应该能够按照作者/艺术家、地点、日期/时间等信息进行筛选。当用户点击结果链接之一(例如书名)时,他们将进入另一个页面,显示该书中包含该关键字的摘录。
我考虑使用Lucene库(或Searcharoo)来实现我的PDF搜索,但我还需要一个数据库来标记所有其他信息,以便可以通过作者/艺术家信息等筛选结果。因此,我考虑为文本、音乐和视频建立表格,并包含每个表格中的文件路径字段。当输入关键词时,我需要搜索音乐和视频文件的数据库,并且还需要搜索PDF文件,当应用筛选器时,音乐和视频搜索很容易,但基于筛选器限制文本搜索变得令人困惑。
我的方法正确吗?有更好的方法吗?由于搜索内容仅限于精神团体,因此要搜索的项目数量不是无限的。我估计约有100-500本书和1000-5000首歌曲。
4个回答

6

Lucene是一种很好的快速启动和运行的方式,不需要太多的努力,还提供了多个扩展索引和搜索功能以更好地满足您的需求。它还具有多个内置分析器,用于常见文件类型,如HTML/XML、PDF、MS Word文档等。

它提供了使用各种字段的能力,这些字段不一定在所有文档中都是统一的(换句话说,音乐文件可能具有不同于基于文本的内容的属性,例如艺术家、标题、长度等),这对于存储不同类型的内容非常有用。

由于您不知道正在处理的实际情况,这可能可行也可能不可行,但对于标记和其他相关功能,您可能还考虑与Lucene索引并行使用数据库,例如MySQL或SQL Server。使用Lucene索引进行全文搜索,然后一旦您获得了结果集,就去数据库中提取所有关联内容。我们公司以前就这样做过,实际上并没有那么麻烦。

注意:如果您决定采用此方法,请小心,因为Lucene提供的“唯一ID”非常易变(每次优化索引时都会更改),因此您将希望将实际ID(数据库中的主键)作为文档的单独字段存储。

另外一个增加的好处是,如果您决定使用C#.NET,那么有一个名为Lucene.Net的移植版,它完全用C#编写。这里的缺点是,您可能会落后几个月的最新功能,但如果您真的需要它们,可以随时查看Java源代码并手动实现所需的更新。


假设我有一个文件夹里面有很多文件需要搜索。我该如何为每个文件添加属性(艺术家等)? - Prabhu
1
如果您正在使用文件,您可能可以通过文件扩展名正确分类它们,然后根据每个文件的扩展名编写代码,以便正确构建您要添加到索引中的Lucene文档。希望这有所帮助! - jeremyalan

3

是的,有更好的方法。尝试使用Solr,特别是查看facets功能。它将为您节省大量麻烦。


多方位搜索是一个不错的选择,如果用户想通过作者、内容类型、文件大小等过滤搜索结果。然而,据我所知,Solr只能安装为Web服务,因此需要更长时间才能启动和运行,并且在客户机上安装软件可能会变成配置噩梦。 - jeremyalan
正确,Solr为Lucene搜索索引提供了一个Web服务接口。是的,可以使用facets进行过滤,同时还可以提供关于搜索对象的元数据信息。对于“在客户端机器上安装软件”这一点,我不太清楚该如何理解,因为Solr是基于服务器的实现。除了暴露搜索功能的应用程序之外,没有涉及到客户端的任何内容。 - jro
“客户端”这里只是指是否将其构建为“现成的”应用程序(例如,用户可以构建自己的索引)。根据问题的描述,似乎不是这样,但如果未来有可能,那么肯定值得考虑。 - jeremyalan

1

谢谢你的建议。我简单地研究了一下,但我觉得全文搜索可能更容易些。 - Prabhu

1
如果您一定要使用数据库,那么建议您使用启用了全文搜索的SQL Server。即使是Express版本也可以使用此功能。这样,您就可以轻松地存储和搜索PDF文件的内容(只需安装免费的Adobe PDF iFilter)。

谢谢。我认为这可能有效。是否有一种方法可以使用SQL查询在文档中获取关键字的“片段”? - Prabhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接