搜索结果的筛选和排序

实现对搜索结果的筛选和排序,需要利用solr的sort功能和facet功能,这两个是垂直搜索中比较常用的功能。对于如何使用这两个功能,其实在索引建好之后我们并不需要做太多的工作就能使用,只用在查询的时候指定相关的参数,Solr会根据参数来执行相应的查询,获得相应的结果。

因为项目中使用SolrJ作为Solr的客户端,并通过servlet提供对外的服务接口,本文将以介绍如何用SolrJ来实现,此外也会涉及利用HTTP接口的参数使用。

各种查询及参数说明

Solr默认有三种查询解析器(Query Parser):

  • Standard Query Parser
  • DisMax Query Parser
  • Extended DisMax Query Parser (eDisMax)

第一种是标准的Parser,最后一种是最强大的。

本文中所提到的参数并不能包含Solr所有参数,具体的使用和更详细的参数请参考官方文档。

基于webmagic爬虫框架的数据抓取

有人可能会有疑问,Heritrix用的好好的,干嘛还要换别的呢?Heritrix固然很好,成熟、稳定、有管理界面、监控、多线程、开箱即用。但这真的适合我们这种垂直爬虫吗?我觉得未必,用Heritrix,你可以通过配置文件来确定接受规则和URL的发现规则,然后直接构建运行就好了。然而对于我来说,它的配置文件中的那些选项说的并不是那么清楚,相关文档也都是很简单的,想用一些复杂的规则都不知道这样对不对,至少要等到好久抓出来东西了,发现多抓了或者少抓了,你才发现配置文件写错了。并且配置文件中的项目也是老多的,这么多东西把人搞的头晕目眩。

好吧,总的来讲,如果你是爬虫老手,对Heritrix的架构了解比较清晰的,Heritrix是个很好的选择。但是对于一个新手,我觉得webmagic更加灵活高效。就拿我的体验来讲,当初用Heritrix抓了3天才抓了七千多数据(可能是我配置文件写的不好),而用webmagic一个白天就抓了一万三的数据。

Solr空间搜索配置及实践

前面讲了空间搜索的两个常用原理,应该还算是比较容易理解的,毕竟只是算法,并不需要我们来实现,我们通过简单地配置就可以用上Solr的空间搜索的功能。下面就来讲讲如何配置空间搜索。

空间搜索原理及相关算法

既然涉及的是旅游搜索,那就不能少了空间搜索的内容。现在移动设备之广泛想必不必多说。根据eMarketer的新数据,2015年全球智能手机用户将达到19.1亿,2016年该指数将增长12.6%达到21.6亿。智能手机都会带有GPS模块,现在一个APP不获取下用户位置都觉得是吃亏,不过这也用户隐私的侵犯也很严重,尤其是在Android生态圈中,不过现在各大手机厂商的系统都对这一块做了一些限制。

空间搜索,又名Spatial Search,基于空间搜索技术,可以做到:

基于Ionic的客户端设计

客户端的设计,利用的是Hybrid APP的构建技术,核心是HTML5技术,下面先简单介绍下Hybrid应用的以及Ionic框架。

技术介绍

Hybrid App介绍

移动app可以大致被分为三种,native、hybrid和web app。如果使用native app,你可以使用设备和操作系统的所有能力,同时,平台的性能负荷最小。然而,构建web app可以让你的代码跨平台,使得开发时间和成本大大减少。而hybrid app把这两者的优点都结合起来,使用一套共同代码,在许多不同的平台上部署类似原生的app。

搜索服务API

这篇文章主要是关于solr和普通用户之间的桥梁SearchService,简单了解下整过工作流程.

利用jsoup提取网页中有用信息

Java 程序在解析 HTML 文档时,最常用的是 htmlparser 这个开源项目。但现在你有更好的选择,那就是Jsoup。

jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

Solr5配置文件参数解析

Solr5的主要配置文件有solrconfig.xmlmanaged-schema,另外一些还有solr.xml,数据导入配置,ZooKeeper配置等。

这里详细介绍两个主要的配置文件。

Solr整合中文分词器mmseg4j

分词的基础概念

为什么要进行分词

中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。