Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索引擎架构帮助.NETC#_C#_.net_Search_Full Text Search_Lucene - Fatal编程技术网

搜索引擎架构帮助.NETC#

搜索引擎架构帮助.NETC#,c#,.net,search,full-text-search,lucene,C#,.net,Search,Full Text Search,Lucene,我正在尝试创建一个搜索引擎,搜索与某个特定精神团体有关的所有文学作品(书籍、文章等)、音乐和视频。当输入关键字时,我想显示一个链接,指向所有出现该关键字的PDF文章,以及所有标记有该关键字的音乐文件和视频文件。用户应该能够使用诸如作者/艺术家、地点、日期/时间等信息对其进行过滤。当用户单击其中一个结果链接(例如,书籍名称)时,它们会被带到另一个页面,在该页面中,无论在哪里找到关键词,都会显示该书籍的片段 我曾想过使用Lucene库(或Searcharoo)来实现我的PDF搜索,但我还需要一个数据

我正在尝试创建一个搜索引擎,搜索与某个特定精神团体有关的所有文学作品(书籍、文章等)、音乐和视频。当输入关键字时,我想显示一个链接,指向所有出现该关键字的PDF文章,以及所有标记有该关键字的音乐文件和视频文件。用户应该能够使用诸如作者/艺术家、地点、日期/时间等信息对其进行过滤。当用户单击其中一个结果链接(例如,书籍名称)时,它们会被带到另一个页面,在该页面中,无论在哪里找到关键词,都会显示该书籍的片段

我曾想过使用Lucene库(或Searcharoo)来实现我的PDF搜索,但我还需要一个数据库来标记所有其他信息,以便根据作者/艺术家信息等过滤结果。因此,我想为文本、音乐和视频创建一个表,并为每个表创建一个包含文件路径的字段。当输入关键字时,我需要在DB中搜索音乐和视频文件,还需要搜索PDF,当应用过滤器时,音乐和视频搜索很容易,但限制基于过滤器的文本搜索会让人困惑


我的方法正确吗?有更好的方法吗?由于搜索内容仅限于精神团体,因此没有无限多的项目可供搜索。我想大概有100-500本书和1000-5000首歌

是的,有更好的方法。尝试并特别检查切面。这将为您节省很多麻烦。

您可以尝试使用MS Search Server Express Edition,它的一个主要优点是免费


如果您确实想使用数据库路径,则应使用SQL Server并启用。您也可以将其用于Express版本。然后,您可以非常轻松地存储和搜索PDF内容(只要您安装免费的Adobe PDF iFilter)。

Lucene是一种快速启动和运行的好方法,无需花费太多精力,还可以扩展索引和搜索功能以更好地满足您的需要。它还有几个用于常见文件类型的内置分析器,如HTML/XML、PDF、MS Word文档等

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

不知道您正在进行的工作的确切实现,这可能是或可能不是可行的,但是对于标记和其他相关特征,您也可以考虑使用Lyene索引与MySQL或SQLServer并列的数据库。使用Lucene索引进行全文搜索,然后在获得结果集后,转到数据库提取所有关系内容。我们公司以前也做过这样的事,实际上并不像听起来那么令人头痛

注意:如果您决定这样做,请小心,因为Lucene提供的“唯一id”非常不稳定(每次索引优化时都会更改),因此您需要将实际id(数据库中的主键)作为单独的字段存储在文档中


另外一个好处是,如果您打算使用C#.NET,那么有一个名为Lucene.NET的端口,它完全是用C#编写的。缺点是,您在所有最新功能方面都落后了几个月,但如果您确实需要这些功能,您可以随时查看Java源代码并手动实现所需的更新。

谢谢。我想这可能行得通。有没有一种方法可以使用sql查询在文档中找到关键字的任何地方获取文本的“片段”呢?谢谢你的提示。我简单地研究了一下,但我觉得全文搜索可能更容易。如果用户想按作者、内容类型、文件大小等过滤搜索结果,多方面搜索是一个不错的选择。然而,据我所知,Solr只能作为web服务安装,因此启动和运行需要更长的时间,在客户端机器上安装软件可能会成为配置的噩梦。没错,Solr为Lucene搜索索引提供了一个web服务接口。是的,facet可以用于过滤,但也可以告诉您有关搜索对象的元数据。不确定“在客户机上安装软件”应该做什么,因为Solr是基于服务器的实现。除了公开搜索的应用程序之外,不涉及客户端内容。所谓“客户端”,我的意思是,如果这是一个“现成”的应用程序(例如,用户可以构建自己的索引)。基于这个问题,看起来不是这样的,但是如果这是未来的一种可能性,那么它肯定是值得考虑的。所以假设我在一个文件夹中有一堆文件,我想搜索。如何将属性(艺术家等)添加到每个文件?如果您使用的是文件,您可能可以按文件扩展名对其进行正确分类,然后根据每个文件的扩展名,您只需编写代码来正确构建要添加到索引中的Lucene文档。希望有帮助!