站内搜索初级优化gt..概述:顾名思义

优采云 发布时间: 2021-03-27 20:05

  站内搜索初级优化gt..概述:顾名思义

  现场搜索一级优化

  php1>。概述:

  顾名思义,站点搜索引擎是网站中的信息搜索引擎。随着互联网的发展,网站已成为企业或机构最重要的公共形象门户。每天,大量潜在客户,合作伙伴,投资者,分析师等都会登录到公司网站,而给他们带来的感受网站将直接影响他们对公司的评估。根据IDC的调查:当用户登录网站时,如果一开始无法快速检索到他所需的信息,则50%的用户将立即离开此网站,而其中60%的用户将不再赞助此网站,这意味着该公司将永远失去其30%的潜在客户。

  当然,我还没有验证上述数据的准确性,但是可以看出,网站上显示的搜索结果质量的准确性对用户体验非常重要。

  注意:以下搜索引擎专门针对网站内的搜索

  php2>。自我培养的搜索引擎:

  除了醒目的美观的搜索框外,出色的站点搜索还可以快速,准确地提供用户检索到的结果。此外,还有一些其他功能可以改善用户体验:

  1.自动提示:不仅可以减少错误的输入,还可以帮助我们推荐产品和产品类别;

  2.自动纠错:与“无搜索结果”相比,结果的显示将始终减少跳出访客的数量。但这是一把双刃剑。如果推荐单词的质量太低,搜索将显得不专业;

  3.相关搜索:基于同义词的内容推荐可以为访问者提供一些出乎意料的搜索提示,增加覆盖范围,并增加用户点击次数。

  4.过滤结果或搜索结果:为用户提供更精确的搜索体验;

  5.排序方法:如果搜索具有多个属性,例如下载次数,点击次数或表单站点的等级,这将使用户可以将注意力集中在顶部。

  6.高级搜索.....

  此处未列出

  php3>。搜索引擎的核心技术:

  其中涉及的技术有:分词技术(幸运的是,我们不使用中文网站),页面爬网分析(全文搜索),索引,搜索匹配和排序算法,搜索关键词统计信息,关联和建议。

  php4>。站点搜索的常用方法:

  使用大型商业搜索引擎提供的界面:

  例如,谷歌,雅虎,国内百度API

  优点:简单,无麻烦,申请帐户,使用API​​;

  缺点:1.无法理解特定的搜索顺序机制,无法控制显示的结果,并且不利于调整;

  2.免费版收录影响体验的广告。

  自己实施:

  2. 1)类似于SQL的查询:

  代码实现相对简单,需要完全匹配搜索字符串,否则搜索不会产生结果,多关键字搜索结果的显示效果不佳;

  2. 2)基于分词的搜索:

  有一些开源项目:Java中著名的Lucene享有很高的声誉,还有许多基于它的其他项目,它们可以支持具有大量数据的项目,并且速度是非常快。 Java项目也可以在项目中学习和集成,因为它是用Java编写的,并且Form Station需要在早期嵌入,所以我只能无奈地放弃我的爱;

  review的第二个开源项目是用C ++编写的Sphinx,它相对主流,速度快,索引大,并且搜索准确性不如Lecence。我尝试了其编译的exe文件。速度确实快。我听说它搜索数十亿个数据级别的时间也处于毫秒级别,而索引时间处于小时级别,以后可以考虑;

  但是它们都有一个问题,那就是它们很棒,但是项目相对较大,并且接口被封装以供我们调用。我们需要修改内部算法。可能还有更多代码需要跟踪。考虑到时间因素,我们选择了一个轻量级搜索框架sphider,整个项目的代码大小小于300K,估计为10,000行,并且基于mysql和php。看完之后,它简直很高。这是我们需要找到的,在跟踪其代码之后,您可以大致了解搜索引擎的工作原理。我们在下面显示的搜索是要移植和调整其搜索功能:

  步骤1>

  获取源数据:如果要检索网页的内容,我们需要构建一个采集器以对需要检索的网页内容进行爬网,并将其存储在数据库中,但我们的pdf-to- html实际上不是很规则,并且搜索的大多数关键词都是猫名或职位名,因此我们省略了此步骤,直接将数据库中的字段作为元数据;

  步骤2>

  分词,提取关键词,建立索引,代码,请参见:SearchindexController.class.php

  1)新增的数据表:关键字表,keyword_post多张工作表,keyword_cat多张工作表

  2)接口:indexallpost(),indexallcat()

  注意:分词速度很慢。后来,我跳出了thinkphp框架,并使用纯SQL编写了一个加速版本。索引400,000个数据大约需要4-5分钟。当然,与aphinx等相比还是有很大的差距,还有机会再次发布

  代码逻辑:

  -> indexPost()和indexCat():获取数据源内容

  -> unique_word_array():根据多个规则(分隔符,忽略单词,提取词干)对每条数据进行分段

  ->计算权重(因为描述等是自动生成的,没有意义,因此权重只是关键字在数据源中出现的次数的简单计算)

  -> save_post_keywords():插入数据库的关键字表,(仅关键字一)

  -> save_post_keywords():然后插入多个关系表(delete_post_keywords_relation():提前删除关系表中的发布数据,多个表的存在可以减轻单个表的压力)

  至此,分词已完成!

<p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线