当你在百度输入一个a,它会罗列出包含了a的一些信息:apple a67 android acfun等等。
我想问下,有没有人做过这样的功能。
注意:我不是想单单实现这个功能,我想知道的是用什么方法,它的效率会高,不要出现这样的情况,你输入一个a,要过好几秒,它才罗列出来。
有人知道百度和谷歌它是用什么方法做的吗?
他是直接去数据库中搜索?还是把他们预先写入内存里?
有人说,可能百度罗列的只是最火热的几个词,所以检索的很快。
那么,我这个功能所在的环境是要在海量信息中检所出来的,有什么方法吗??
  注意你说的方法的效率!!

解决方案 »

  1.   

    直接去数据库中搜索?还是把他们预先写入内存里?
    这2中都不可能!!特别是百度和谷歌这样的...SEO -http://msdn.microsoft.com/zh-cn/library/ff723996(Expression.40).aspx
      

  2.   

    确实只是一些热门词,而且是内存操作。
    应该是trie,也可能是排序好的数组。
      

  3.   

    百度和google应该是它们自己的对关键词的文件索引方式。也就是说它们不仅对整篇文档建索引,可能还另外对关键词建了索引。
    lucene的接口是很简陋的,只有根据分词后的term搜索整个文档的方法。
      

  4.   

    倒排索引……lucene源代码可以看看
      

  5.   

    这个用tire树是很好的选择,因为一旦建好树之后,查询的效率是非常高的。你如果做过ACM的话,就应该很熟悉这种数据结构了。
      

  6.   

    你可以先做个小DEMO程序试试吧
    应该不难的
      

  7.   

    呵呵,这个功能首先是钱功能本身并不复杂,但是需要大量存储开销及负载平衡的开销别跟我我百度,google都做了,而且速度快并且准确。你首先得问问他们到底花了多大成本去完成这件事?
      

  8.   

    小系统  直接搜索DBMS好无压力
      

  9.   

    推荐使用 Ajax 无刷新调用后台的方法 显示的速度很快
      

  10.   


    怎么实现?我把那些信息黏贴在txt上,这个文件就很大了,能读得进去吗?
      

  11.   

    所谓的钱堆出来的功能,都是真实的,但并不能代表技术高低.
    试想想,google用什么服务器.