31

谷歌/GMail/等。不提供部分或前缀搜索(例如 stuff*),尽管它可能非常有用。我经常在 GMail 中找不到邮件,因为我不记得确切的表达方式。

我知道有词干等,但不一样,尤其是当我们谈论英语以外的语言时。

为什么谷歌不添加这样的功能?是因为指数会爆炸吗?但是数据库提供部分搜索,所以肯定有很好的算法来解决这个问题。

这里有什么问题?

4

6 回答 6

8

谷歌实际上并不存储它搜索的文本。它存储搜索词、页面链接以及该词在页面中的位置。该数据结构在传统数据库意义上被索引。我敢打赌,使用通配符会使索引的索引变得非常慢,正如 Developer Art 所说,它不是很有用。

于 2009-12-02T19:19:25.553 回答
8

谷歌确实搜索部分单词。Gmail 没有。既然你问这里有什么问题,我的回答是缺乏努力。这个问题有一个解决方案,可以在恒定时间和线性空间中搜索,但对缓存不太友好:后缀树。Suffix Arrays 是另一种对缓存更友好且时间效率更高的选项。

于 2009-12-03T01:13:34.890 回答
6

可以通过 Google Docs - 关注这篇文章:

http://www.labnol.org/internet/advanced-gmail-search/21623/

于 2015-08-24T09:28:24.230 回答
3

谷歌代码搜索可以基于正则表达式进行搜索,所以他们确实知道该怎么做。当然,与 Web 搜索相比,Code Search 必须索引的数据量很小。在网络搜索中使用正则表达式或通配符搜索会增加索引大小并将性能降低到不切实际的水平。

于 2009-12-02T19:20:54.100 回答
0

在 Google 中查找任何内容的秘诀是输入搜索词(或引用的短语)的组合,这些词很可能出现在您要查找的内容中,但不太可能一起出现在不相关的内容中。通配符表达式与此相反。只需输入您希望通配符匹配的字词,请记住 Google 会为您进行词干提取。早在计算机在 Steam 上运行的时代,Lycos (iirc) 就有模式匹配,但几年前他们将其关闭。我认为这给他们的服务器带来了太多的负载。

于 2009-12-02T19:56:38.253 回答
-1

因为您无法明智地得出 car* 的含义:

汽车?地毯?萝卜?

Google 的算法比较文档文本以及外部入站链接以确定文档的内容。使用这些通配符,所有这些算法都会变成垃圾

于 2009-12-02T19:15:10.993 回答