分享

做追书软件之搜索api

 BabydSelf 2017-02-26

1.什么是迅搜?

自己做一个追书软件之搜索api

迅搜

迅搜英文名为xunsearch,是一个优秀的开源中文全文检索引擎。全文检索可以降低服务器搜索负荷、极大程度的提高搜索速度和用户体验。

迅搜采用c/c++编写,基于xpian+scws,单库最多支持 40 亿条数据,在 5 亿网页大约 1.5TB 的数据中检索时间不超过 1 秒(非缓存)。虽然迅搜是一个免费开源的软件,但它提供了许多的商业功能,如:结果高亮,相关关键词,搜索下拉等。迅搜提供PHP SDK,性能非常优秀。

2.为什么使用迅搜?

自己做一个追书软件之搜索api

如果我们不使用迅搜或其他全文检索引擎,那么实现搜索将比较困难。

完成一个搜索引擎需要有分词能力,以及全文检索(在小说标题,作者,简介中检索),并且需要比较快的速度。如果我们直接使用mysql的like语句,左右都使用%是不会使用索引的!而且,就算能够使用索引,性能也是相当不理想。想必没有人能够忍受搜索一下十几秒甚至几十秒吧!

3.迅搜的安装

迅搜需要linux/unix环境,不能在win下安装使用。所以如果我们使用的是windows,可以选择

  1. 额外租一台linux的虚拟机作为搜索服务器

  2. 使用linux虚拟机

  3. 重装系统

  4. 使用cygwin(测试暂未成功)

小编在尝试cygwin的时候,编译过程中出现了问题,需要我们手动修改一下源代码才能够继续编译。所以小编选择了重装系统,使用centos。至于如何安装,正如官网手册上,首先wget下载下来源代码,然后tar解压,之后运行setup.sh即可,简单便捷。

4.迅搜的使用

迅搜自带php sdk,并且我们可以通过他自带的一些工具进行测试。

首先我们先创建一个ini配置文件,将小说标题作为标题型索引,权重设置为5;作者设置为普通的字段型索引,权重3;简介为内容型索引,权重1;小说ID为主键型索引,权重0。全部使用混合区索引即可,其他字段可不做索引。然后我们通过Indexer工具导入mysql中的数据,使用

php 迅搜安装目录/sdk/php/utils/Quest.php ini路径 斗破苍穹

即可测试搜索有关斗破苍穹的数据。

自己做一个追书软件之搜索api

搜索结果

5.在api中使用迅搜

首先我们在search.php中添加一个方法:public function searchByXS。

我们首先需要先引入迅搜phpsdk中的XS.php,这个文件是合并了迅搜SDK所有类的一个类。在searchByXS中我们使用$xs = new XS(ini路径);初始化XS类,接着通过$search = $xs->search取得搜索实例。

使用搜索非常简单,我们可以先设置模糊搜索(即只需出现分词结果中的任意一个词就可返回为搜索结果)$search->setFuzzy,然后可以开启同义词匹配,再setQuery设置搜索词,最后调用->search即可取得结果。结果可使用foreach遍历。

6.结果关键词高亮

在foreach遍历搜索结果时 foreach ($datas as $data),我们可以通过$data->title获取字段title的值,而如果我们需要关键词高亮,只需要使用$search->highLight($data->title)即可将匹配的关键词进行高亮处理。高亮处理会默认给关键词加上em标签,至于样式,则需要自己在css中设置。

example:

$datas = $search->search();

foreach ($datas as $data) {

$results[]['title'] = $search->highLight($data->title);

}

以上就是如何使用迅搜作为全文检索引擎的教程了,同时小编的api也已经开源到github上,欢迎来star~

    GITHUB:https://github.com/geri5/eBookApi

      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多