php搜索sphider站内搜索Dome

  • 时间:
  • 浏览:78
  • 来源:无双建站

站内搜索引擎顾名思义即网站内的信息搜索引擎,随着网络的发展,网站已经成为了企业或机构最重要的公共形象门户。每天,大量潜在的客户、合作者、投资人,分析师等会登陆企业的网站,网站带给他们的感受将直接影响到他们对公司的评价。根据IDC的调查显示:当用户登陆一个网站时,在一开始如果不能很快地检索到他所需要的信息,则50%的用户会立刻离开此网站,其中的60%将不再光顾这个网站,这意味着公司将永远失去30%的潜在客户。

当然,我也没去考证过上面的数据准不准,但是可以看出站内的搜索的展示结果质量的准确度对用户的体验是很重要的。

Sphider是一个轻量级,采用PHP开发的web spider和搜索引擎,使用mysql来存储数据。可以利用它来为自己的网站添加搜索功能。Sphider非常小,易于安装和修改,已经有数千网站在使用它。

step 1>
获得源数据:如果要检索网页内容,我们需要建立爬虫爬取需要检索的网页的内容,存数据库,但我们pdf转的html实际上不太规整,而且搜索的关键词绝大部分都是cat或者post的name,所以我们省去了这一步骤,直接取数据库里的字段作为元数据;

step 2>
分词,提取关键词,建立索引, 代码见:SearchindexController.class.php
1)新加数据表:keywords表,keyword_post多张,keyword_cat多张
2)接口:indexallpost(), indexallcat()

注:分词速度较慢,后期跳出thinkphp的框架,用纯SQL写了一个提速版本,索引40万数据,大概需要4-5min,当然与aphinx等比较还有较大的差距,有机会再放出来
代码逻辑:
->indexPost() & indexCat(): 取数据源内容
->unique_word_array(): 每条数据按照多重规则分词(分隔符、忽略词、提取词干)
->计算权重(因为description等都是自动生成的,无意义,所以权重只是对keyword在数据源中出现的次数简单的计算)
->save_post_keywords(): 插入数据库的keywords表,(keyword唯一)
->save_post_keywords(): 然后插入多张关系表(delete_post_keywords_relation(): 事先删除关系表里该post的数据,多表的存在可以缓解单表的压力)
至此,分词完毕!

大概过程是这样,说多了都是废话,只要建立了相应的数据表,用正确的方式调用上述类,应该就能正确的运行,都在代码里……

另附词干提取:
Stem.class.php, 波特词干提取,网上有开源代码,不在此贴出

您需要支付5.00元 才能下载此资源。