.net 哪种搜索技术/方法最快?(在文件搜索上下文中)

.net 哪种搜索技术/方法最快?(在文件搜索上下文中),.net,data-structures,full-text-search,filesystems,search,.net,Data Structures,Full Text Search,Filesystems,Search,我不知道他们在普通的windows搜索中使用了什么。但是有一种技术,你可以一次使用文件索引,然后在以后使用索引进行更快的搜索。(例如,windows search 4.0) 有没有比这更快的搜索方法?你能从实现的角度详细阐述一下吗?(假设我可能需要实施) 为了便于理解,让我这样说: 假设我想构建一个搜索应用程序,它执行与我们在windows中使用的搜索操作类似的搜索操作 我的问题是,构建这样一个应用程序的可能选项/方式/方法是什么? (并且比现有的要快。) (可以使用二进制搜索树技术吗?您是只搜

我不知道他们在普通的windows搜索中使用了什么。但是有一种技术,你可以一次使用文件索引,然后在以后使用索引进行更快的搜索。(例如,windows search 4.0)

有没有比这更快的搜索方法?你能从实现的角度详细阐述一下吗?(假设我可能需要实施)

为了便于理解,让我这样说:

假设我想构建一个搜索应用程序,它执行与我们在windows中使用的搜索操作类似的搜索操作

我的问题是,构建这样一个应用程序的可能选项/方式/方法是什么? (并且比现有的要快。)


(可以使用二进制搜索树技术吗?

您是只搜索文件名还是也要查看内容?您希望用什么语言实现此功能

如果您只查找文件名,那么索引会大大提高性能,而如果您需要打开要查找的每个文件,那么索引只会在您只打开那些您要查找的内容可能位于其中的文件的方式上有所帮助


它仍然需要您打开每个文件,直到找到您要注意的内容。

请查看。这是一个超快速的文本(文件)搜索库。此外,还提供了。如果您喜欢自己实现它,那么它是实现的一个很好的起点和基准

全文搜索:假设您有一本单词词典,对于每个单词,您都写下了包含该单词的文档以及该单词在该文档中的确切位置。这被称为全文索引,它允许您执行布尔搜索和匹配精确短语等操作。全文索引可以轻松扩展到数百万个文档,这是Windows Search 4.0通常使用的功能。另见Lucene或Sphinx

概念搜索:概念搜索允许您输入一组相关单词(甚至是整个文档),并返回与您的输入最相似的文档。基于您的文档集合,它生成概念空间,从而可以推断单词之间的语义链接。这允许它返回更多相关的搜索结果,因为计算机“理解”您正在搜索的概念,并将匹配概念上相似的单词和短语。这是企业搜索和eDiscovery解决方案常用的方法。提供概念搜索的产品包括Engenium和Autonomy

元搜索:不是直接搜索内容,而是搜索有关内容的信息,称为元数据。元数据可以包括标记、关键字、作者姓名、时间戳等内容。因此,例如,如果您知道文档编写的大致日期,可以将该元数据包括在搜索条件中,以更快地缩小搜索结果的范围


正如您所知道的,有许多方法来进行搜索,每种方法都涉及许多不同类型的数据结构。如果你想让我详细说明某个领域,我可以帮你。

网上有很多关于全文搜索的研究论文,还有很多源代码。如果你看一下它们,你会发现在现代硬件上使用二叉搜索树并不能提供很好的结果。二叉搜索树是一种非常特殊的数据结构,在具有多级缓存的现代cpu上,它的速度不尽可能快。快速数据结构的扇出率高于2


此外,这个问题更适合(基数)trie。请参阅维基百科。

在大型语料库上进行全文搜索基本上有两种技术:发布列表和后缀数组

过帐列表是(术语、文档id)对的列表,可以选择在文档中有一个位置。如果按术语对其进行排序或散列,则可以高效地搜索全文索引

有各种各样的技术可以使发布列表更小、访问更快、更新更快、更灵活,有些是以牺牲准确性为代价的。Lucene可能是目前最好的基于列表的文本索引器,并且(与您之前的评论相反),它可以索引PDF、Microsoft Word等文件中的文本。由Thomas Maierhofer链接的端口看起来是一个相当合理的端口,当然,您总是有点落后于Java版本的前沿

对于一个比内存大得多的语料库,您几乎必须将发布列表存储在磁盘上。这不利于使用简单的二元搜索树来访问它:如果你有十万个文档,每个文档一万字,你就有十亿个帖子,这意味着你的二元搜索树的最小深度为30。问题是,从树的根到叶的路径上的30个节点通常位于磁盘的不同部分,因此磁盘必须搜索30次才能找到一个学期的帖子!这大约是2.5秒,速度太慢了

然而,二叉树数据结构的一个修改版本称为“B-树”,它可以工作。Lucene使用一种非常类似于B-树的简单数据结构,但更容易支持大规模更新。我自己编写了这个数据结构的一个非常简单的版本,它在几页Python中为我的电子邮件实现了一个全文搜索引擎。我每天都在使用它,它是免费软件,而且它在我使用它的时候运行得非常好,但它并不像Lucene那样是一个世界级的搜索系统

作为以牺牲准确性为代价缩小发布列表的一个例子,管理千兆字节的图书(和)有一个称为“有符号最小完美哈希表”的数据结构,它实际上不存储索引的术语,只存储它们的哈希。所以有一个小概率o