`
ywlqi
  • 浏览: 70554 次
社区版块
存档分类
最新评论

仿google、百度的联想输入

    博客分类:
  • java
阅读更多

前段时间公司有个需求,要求用户输入时能够像google、百度输入框那样提示相关信息。

思路很简单,通过ajax与后端交互获取结果集,问题是获得结果集如何足够快?我想问题的关键应该是在如何建索引,以及索引如何存储,才能检索速度够快。

和朋友讨论过基于汉字拼音等等方式,问题是自己写存储和检索的成本实在太高(其实是不会,现学现卖也不太现实)。

后来还是用lucene实现,自己写了个前缀分词器(姑且这么叫吧),例如:北京欢迎您,被分词为:北、北京、北京欢、北京欢迎、北京欢迎您几个词条,利用lucene进行索引和检索,单机访问速度也还可以接受,在高并发下还没测试。

 

但这种实现是典型的“头痛医头,脚痛医脚”的方式,在这里想问问大侠们有没有更好的方法呢?

用lucene实现的话?如果出现性能瓶颈,应该朝哪个方向优化?

 

 

 

分享到:
评论
7 楼 cccccccyyl 2009-12-15  
Teok 写道
cccccccyyl 写道
去看一下分词系统,应该有你想要的东西。另,客户端也要优化一下,我之前也打算做一个的,只把JS部分写完了,比GG的完美,服务器端还没想好怎么做。

不论怎么样,你得预缓存,如果要求性能,肯定不能考虑频繁的实时查询数据库。

可以分词频级别,分级容器放关键词句,你肯定不会是匹配到一个关键词,就得马上要拉取整个文本到客户端的,可以拉取部分,这样可以缓存起来部分句子,降低内存占用。

还可以通过JS来控制,比如,用户点击输入框,onblur事件或者windown.onload之后预缓存部分高频率词句到客户端,差不多用户输入的时候用纯JS匹配,这个我跟我朋友已经实现了。JS匹配不到的,到服务器端查询,这样在高词频的部分可以明显降低压力,我试过了,纯JS的正则解析,至少可以承受4M的string,这仅仅是我未优化正则之前的速度。


恩。很必要在客户端做缓存来大大缓解服务器的压力,我做的类似的东西也打算缓存,不过还没具体实现,你这成功的例子可以做为很好的证据了。
不过根据不同的应用,我们还可以加入高频词统计,等到用户用一段时间,就基本可以确定高频词汇了。
ps:我现在也只想到客户端优化,至于服务器端,前些日子看到淘宝UED的玉伯开发的kissysuggest,当有人问起如何优化服务器端,他也避而不答。。估计服务器端优化很“玄虚”的吧。呵呵


在前端服务器上加载一个memcache,然后给你的缓存内容自定一个格式,让前端去帮你缓存到内存并输出,可以自定义mime,然后后端不停的统计,并写入到此缓存文件里。这可能是比较简单的办法了,再复杂点的就是自己写个轻量级http服务器端,专门负责处理。

定时更新高词频的统计是有必要的。可以根据高词频的词,对你已有的文字内容进行分析,然后缓存起来,避免实时查询。

搜一下分词器,LZ需要这个。
6 楼 aiyoo521 2009-12-15  
我想说这样的组件好像有很多,去google一下autoComplete会出来一箩筐。楼主可以考虑试试看。
5 楼 Teok 2009-12-15  
cccccccyyl 写道
去看一下分词系统,应该有你想要的东西。另,客户端也要优化一下,我之前也打算做一个的,只把JS部分写完了,比GG的完美,服务器端还没想好怎么做。

不论怎么样,你得预缓存,如果要求性能,肯定不能考虑频繁的实时查询数据库。

可以分词频级别,分级容器放关键词句,你肯定不会是匹配到一个关键词,就得马上要拉取整个文本到客户端的,可以拉取部分,这样可以缓存起来部分句子,降低内存占用。

还可以通过JS来控制,比如,用户点击输入框,onblur事件或者windown.onload之后预缓存部分高频率词句到客户端,差不多用户输入的时候用纯JS匹配,这个我跟我朋友已经实现了。JS匹配不到的,到服务器端查询,这样在高词频的部分可以明显降低压力,我试过了,纯JS的正则解析,至少可以承受4M的string,这仅仅是我未优化正则之前的速度。


恩。很必要在客户端做缓存来大大缓解服务器的压力,我做的类似的东西也打算缓存,不过还没具体实现,你这成功的例子可以做为很好的证据了。
不过根据不同的应用,我们还可以加入高频词统计,等到用户用一段时间,就基本可以确定高频词汇了。
ps:我现在也只想到客户端优化,至于服务器端,前些日子看到淘宝UED的玉伯开发的kissysuggest,当有人问起如何优化服务器端,他也避而不答。。估计服务器端优化很“玄虚”的吧。呵呵
4 楼 zozoh 2009-12-15  
从服务器生成关键词列表,比如,所有 “北京” 开头的关键词

<ul class="keywords">
   <li class="b j h y n">北京欢迎你
   <li class="b j j s s">北京金山上
</ul>


输入框输入“ bjh ”

JS 代码(jQuery):

$("#keywords").show();
$("#keywords li").hide();
$("#keywords").children(".b.j.h").show();


LZ 可以自行决定,当用户输入 b 还是 bj ,从服务器刷新关键词列表。 这样,服务器就不需要对一个词建太多索引,基本一个词,索引投 1 个或者 3 个字就够用了

缺点是,如果用户输入" jbh " 和 "bjh" 滤出的关键词是一样的,但是这样的情况,实际发生的概率不大,基本可以接受,如果需要考虑顺序,可以改用 jQuery 的属性选择器 " [attribute^=value] ", 它的速度比 class 选择器要慢一点。
3 楼 cccccccyyl 2009-12-15  
去看一下分词系统,应该有你想要的东西。另,客户端也要优化一下,我之前也打算做一个的,只把JS部分写完了,比GG的完美,服务器端还没想好怎么做。

不论怎么样,你得预缓存,如果要求性能,肯定不能考虑频繁的实时查询数据库。

可以分词频级别,分级容器放关键词句,你肯定不会是匹配到一个关键词,就得马上要拉取整个文本到客户端的,可以拉取部分,这样可以缓存起来部分句子,降低内存占用。

还可以通过JS来控制,比如,用户点击输入框,onblur事件或者windown.onload之后预缓存部分高频率词句到客户端,差不多用户输入的时候用纯JS匹配,这个我跟我朋友已经实现了。JS匹配不到的,到服务器端查询,这样在高词频的部分可以明显降低压力,我试过了,纯JS的正则解析,至少可以承受4M的string,这仅仅是我未优化正则之前的速度。
2 楼 ywlqi 2009-12-14  
平衡树存哪呢?存内存中太耗内存,存文件中,读写很麻烦(不会)
其实我想问两个问题:
1、前缀分词这个思路对不对
2、除了恶补基本功以外,还有没有别的解决方案?
1 楼 vvggsky 2009-12-14  
維護一棵大平衡樹

相关推荐

    成熟的仿百度和goole的搜索联想提示功能

    "成熟的仿百度和Google的搜索联想提示功能"指的是在用户输入关键词时,系统能够实时预测并显示可能的相关搜索词,这些联想词通常是基于用户历史搜索数据、热门搜索趋势或相关词汇关联性来生成的。 实现这一功能的...

    仿百度google的自动搜索可输入下拉框

    仿百度google的自动搜索可输入下拉框, 本人开发的, 网上的都不好用,郁闷,提手花了一天半呢

    百度谷歌联想搜索、自动提示源代码

    本文件"百度谷歌联想搜索、自动提示源代码"很可能包含了实现这一功能的部分代码。 首先,我们来理解一下联想搜索或自动提示的基本原理。这一功能通常基于以下关键技术: 1. **关键词匹配**:系统会实时分析用户...

    C# 模仿百度搜索框,用c#编写,即输入词或字自动出来相关词条

    模仿百度搜索框,用c#编写,即输入词或字自动出来相关词条,实现 百度.GOOGLE等输入框里的相似查询显示

    自动完成仿google,百度,有例子,html

    这个压缩包文件的标题"自动完成仿google,百度,有例子,html"表明,它提供了一种实现方式,用以模仿Google和百度的自动完成功能,通过HTML、CSS和jQuery来创建。描述中强调了这是"绝对原创",并且包含实例,这有助...

    谷歌百度搜狗日文输入法

    它支持自动学习用户的输入习惯,能够提供精准的预测和联想,提高输入效率。此外,谷歌输入法还具有丰富的表情符号和颜文字库,满足了用户在社交交流中的多样需求。同时,这款输入法在不同平台(如Windows、Mac、...

    仿谷歌搜索可键盘下拉提示

    标题中的“仿谷歌搜索可键盘下拉提示”指的是在网页搜索框中实现类似谷歌搜索引擎的自动补全功能,也就是当用户在输入关键字时,搜索框会根据已输入的部分文字给出可能的搜索建议,以帮助用户快速找到他们可能感兴趣...

    Ajax 模仿google百度提示输入框 v1.8

    此小程序是模仿Google(sgguest)输入提示框所编写 亦可用于用户注册邮箱时的提示 此程序使用方便简单、易用灵活 且不限Asp、php、net 更新说明: 1.支持xhtml 2.兼容IE6,IE7,FF 3.支持input显示与value分离【以隐藏...

    android利用数据库实现搜索联想功能

    本教程将详细介绍如何利用Android的SQLite数据库来实现这一功能,参照Google和百度搜索的联想效果。 首先,我们需要创建一个SQLite数据库。在Android中,可以通过`SQLiteOpenHelper`类来实现数据库的创建和版本管理...

    searchs:可以实现关键词联想的,搜索框;集合了百度,谷歌,搜狗,360,腾讯等多家搜索

    集合了百度,谷歌,搜狗,360,腾讯等多家搜索截图预览:![img](img/2015-04-26_111924.jpg)![img](img/2015-04-26_111752.jpg)![img](img/2015-04-26_111951.jpg)![img](img/2015-04-26_111902.jpg)

    联想台式机(扬天,启天,天骄等)Phoenix BIOS 原生2.0 升级SLIC 2.1菜鸟操作经过

    - **技术支持**:可参考BIOS之家论坛、百度、Google等资源。 - **编写时间**:本教程由Changxin于2009年10月30日编写。 - **软件获取**:文中提到的工具需自行搜索下载。 以上便是将联想台式机Phoenix BIOS的SLIC...

    人工智能-项目实践-搜索引擎-简单的浏览器主页,随机壁纸,多搜索引擎,有关键词联想

    多搜索引擎的集成则意味着用户可以在同一个页面上选择不同的搜索引擎进行信息检索,例如谷歌、百度、必应等,满足不同用户的需求。关键词联想则是基于人工智能的一种功能,它能根据用户输入的部分关键词预测并推荐...

    baidu_appwidget

    2. **即时反馈**:在用户输入关键词时,可能会有实时的联想词或热门搜索推荐,帮助用户更准确地定位搜索内容,这是借鉴豌豆荚小部件的一项功能,可以提高用户的搜索精度。 3. **交互设计**:appwidget界面简洁,与...

    百度搜索助手-crx插件

    1. **智能提示与联想搜索**:百度搜索助手能根据用户输入的关键字提供智能提示,同时进行联想搜索,帮助用户快速找到相关的搜索建议,节省输入时间。 2. **优化搜索结果**:该插件可能具备分析搜索结果的能力,优先...

    输入法词库 txt格式 很全的

    1. **智能输入**:利用词库可以实现智能联想、自动补全等功能,极大地提高了用户输入文字的速度和准确性。 2. **个性化定制**:通过分析用户的输入习惯,可以进一步优化词库,提供更加个性化的输入体验。 3. **语言...

    拼音输入法

    1. 自学习和词组联想:输入法软件会根据用户的输入习惯学习新的词汇和短语,自动形成词组,提高输入速度。 2. 智能纠错:当用户输入错误的拼音时,输入法能够识别并提供更正建议。 3. 情景感知:在特定场景下(如...

    C、C++各大公司面试笔试题

    本资源摘要信息涵盖了C、C++各大公司面试笔试题,包括微软、谷歌、百度、腾讯、网易、联想等公司的面试题。这些问题涵盖了算法、数据结构、编程语言等多方面的知识点,是 IT 行业中非常重要的知识领域。 1. 微软十...

    seo关键词分析工具2010版V6.11+注册机.

    3、解决了分析关键字时,百度竞价不准确和谷歌收录为0 的问题(谷歌退出中国引起的) 4、伪原创文章,增加了同义词的修改功能和增加了文章复制的快捷功能。 5、完善了网站收录功能。 6、增加了中文分词(这是一个...

    NewTab-crx插件

    这款插件的设计理念是满足个人自用需求,尽管功能相对简洁,但对于习惯于百度和谷歌搜索引擎的用户来说,它提供了独特的价值。 首先,该插件的一大亮点是它能够记录用户的最近10条搜索记录。这意味着用户在浏览网页...

    基于android的导航系统的设计与实现.docx

    例如,“Google地图”、“百度地图”等应用提供了丰富的地图服务功能,如显示电子地图、实现自我定位、城市搜索、路线规划等。随着3G网络的完善以及4G网络的普及,手机接入网络的速度得到了大幅提升,这使得地图用户...

Global site tag (gtag.js) - Google Analytics