Indexing 建立反向索引的最佳方法是什么?

Indexing 建立反向索引的最佳方法是什么?,indexing,search-engine,inverted-index,Indexing,Search Engine,Inverted Index,我正在建立一个小型网络搜索引擎,用于搜索大约100万个网页,我想知道建立反向索引的最佳方法是什么?使用DBMS还是什么…?从存储成本、性能、索引速度和查询等许多不同的角度?我不想使用任何开源项目,我想自己做一个 也许您需要详细说明为什么不希望使用Lucene或Sphinx之类的F/OSS工具。也许您需要详细说明为什么不希望使用Lucene或Sphinx之类的F/OSS工具。当前大多数封闭源代码数据库管理器都具有某种全文索引功能。考虑到它的流行性,我想大多数都有针对HTML的预先编写的过滤器,所以

我正在建立一个小型网络搜索引擎,用于搜索大约100万个网页,我想知道建立反向索引的最佳方法是什么?使用DBMS还是什么…?从存储成本、性能、索引速度和查询等许多不同的角度?我不想使用任何开源项目,我想自己做一个

也许您需要详细说明为什么不希望使用Lucene或Sphinx之类的F/OSS工具。

也许您需要详细说明为什么不希望使用Lucene或Sphinx之类的F/OSS工具。

当前大多数封闭源代码数据库管理器都具有某种全文索引功能。考虑到它的流行性,我想大多数都有针对HTML的预先编写的过滤器,所以搜索像
这样的东西不会给每个网页带来1000次点击

如果您想完全独立完成这项工作,那么过滤HTML可能是最难的部分。从这里开始,倒排索引需要大量的文本处理,并产生大量的结果,但它基本上相当简单——你只需扫描所有文档,并建立一个单词及其位置列表(通常在过滤掉极为常见的单词后,如“a”、“an”、“and”等,这些都不是有意义的搜索词)然后把这些都放在一个大索引中


考虑到完整索引的大小,添加一个足够小的二级索引通常很有用,这样您可以确保它可以轻松地放入实际内存中(例如,将其限制为几百个条目左右)。一个非常小(但有些无效)的版本只使用单词的第一个字母,因此“A”单词从0开始,“B”在12345开始,“C”在34567,依此类推。但这并不是很有效——例如,以“a”开头的单词比以“X”开头的要多得多。更有效的方法是建立索引,然后在索引中选择几百个(或其他)均匀分布的单词。然后将其用作第一级索引。从理论上讲,你可以做得更详细一些,比如B+树,但这通常是多余的——在一百万个文档中,你很可能会得到不到十万个单词,而这些单词的使用频率足以对索引大小产生很大的影响。即使如此,仍有相当多的条目是打字错误,而不是真正的单词……

目前大多数封闭源代码数据库管理器都具有某种全文索引功能。考虑到它的流行性,我想大多数都有针对HTML的预先编写的过滤器,所以搜索像
这样的东西不会给每个网页带来1000次点击

如果您想完全独立完成这项工作,那么过滤HTML可能是最难的部分。从这里开始,倒排索引需要大量的文本处理,并产生大量的结果,但它基本上相当简单——你只需扫描所有文档,并建立一个单词及其位置列表(通常在过滤掉极为常见的单词后,如“a”、“an”、“and”等,这些都不是有意义的搜索词)然后把这些都放在一个大索引中


考虑到完整索引的大小,添加一个足够小的二级索引通常很有用,这样您可以确保它可以轻松地放入实际内存中(例如,将其限制为几百个条目左右)。一个非常小(但有些无效)的版本只使用单词的第一个字母,因此“A”单词从0开始,“B”在12345开始,“C”在34567,依此类推。但这并不是很有效——例如,以“a”开头的单词比以“X”开头的要多得多。更有效的方法是建立索引,然后在索引中选择几百个(或其他)均匀分布的单词。然后将其用作第一级索引。从理论上讲,你可以做得更详细一些,比如B+树,但这通常是多余的——在一百万个文档中,你很可能会得到不到十万个单词,而这些单词的使用频率足以对索引大小产生很大的影响。即使如此,还是有相当多的条目是打字错误,而不是真实的单词……

您可能需要从Hadoop开始。它将在集群中有效地分布索引构建。你可以使用任何语言。推荐使用Java和Python。 使用Hadoop/MapReduce,您可以轻松地为网页编制索引。但它们需要缓存/存储在磁盘上,您需要一个解析器/标记器来首先提取文本。网上有一些免费的解析器。
如果要手动执行,可以从这里开始。一旦有了索引,存储它就是另一项任务。

您可能需要从Hadoop开始。它将在集群中有效地分布索引构建。你可以使用任何语言。推荐使用Java和Python。 使用Hadoop/MapReduce,您可以轻松地为网页编制索引。但它们需要缓存/存储在磁盘上,您需要一个解析器/标记器来首先提取文本。网上有一些免费的解析器。
如果要手动执行,可以从这里开始。一旦你有了索引,那么存储它是另一项任务。

如果你还在寻找,我想这本书有你的答案


如果你还在找,我想这本书有你的答案


真的没有人有最合适的答案,因为没有人正确理解这个问题,我想问一下建立反向索引的方法,如何建立它,为什么用这个x方法?@D3Developer:也许你需要问得更好一些?:)非常感谢,但根据我对Lucene、Sphinx和Hadoop等F/OSS工具的了解,我现在构建了自己的一个。问题并不十分清楚,似乎F/OSS工具可能适合他的需要。但我认为这不应该是公认的答案。杰瑞·科芬给出了一个非常好的回答。这将帮助每个通过谷歌登陆这个页面的人。真的没有人