3.5 实例
前面给出了全文检索、词项检索等数据检索方法,并介绍了metric aggregations、bucket aggregations等聚合方法。通过这些方法,可以对索引库中的数据集进行检索并统计特定数据。下面的实例是对采集的手机产品库数据集的相关检索与聚合,这些数据是利用定制网络爬虫取得的,之后通过一定的方法建立索引完成入库(利用Java采集数据存入Elasticsearch的过程详见本书后续章节)。数据集的描述如下:
_index: yesky //针对天极手机产品库数据的索引文件名称 _type: cellphone //针对天极手机产品库数据的类型文件名称 _id: xxx //id号 _version: x //版本号 _score: x //排序分值 _source: { //数据字段描述(内容略) url:(略) //网址,如http://product.yesky.com/product/877/877594/ phoneName: (略) //手机名称和型号 launchDate: (略) //上市日期 screenSize: (略) //主屏幕尺寸(英寸) resolution: (略) //屏幕分辨率 processor: (略) //处理器名称 battery: (略) //电池容量(毫安时) ram: (略) //运行内存容量(GB) rom: (略) //机身存储容量(GB) backCamera: (略) //主摄像头像素(万) frontCamera: (略) //前摄像头像素(万) }
首先在Elasticsearch中建立索引,在head工具的Web前端界面中,跳转至“复合查询”界面。在左侧“查询”窗口第一行填写Elasticsearch的URL地址即http://localhost:9200;第二行填写要创建的索引名称即yesky,在右侧选择PUT方式;在第三行多行文本框输入创建索引的语句,如代码段3.52所示,按下“验证JSON”按钮,经验证无误后即可提交请求。设置mappings成功后使用Java程序将在线数据采集至Elasticsearch中即可。
//代码段3.52:为 yesky索引设置 mappings curl-XPUT localhost:9200/whale/_mapping/cellphone-d'{ //注意这里使用PUT方法 "mappings": { "cellphone": { //创建cellphone类型 "properties": { "url": { "type": "keyword" }, "phoneName": { "type": "text", "index": "analyzed", "analyzer": "ik_max_word" //设置IK分词器 }, "price": { "type": "long" }, "LaunchDate": { "type": "date", "format": "yyyy年MM月dd日" //日期格式应根据实际数据设置 }, "screenSize": { "type": "keyword" }, "resolution": { "type": "keyword" }, "processor": { "type": "keyword" }, "battery": { "type": "long" }, "ram": { "type": "long" }, "rom": { "type": "long" }, "backCamera": { "type": "long" }, "frontCamera": { "type": "long" } } } } }'
在爬取的数据中,可以利用手机的品牌或型号,对手机产品数据进行全文检索。在图3.29中使用全文检索中的match_phrase_prefix查询对手机产品信息进行检索,该图左侧是相应的代码实现,右侧是检索结果。
图3.29 执行match_phrase_prefix查询
采用词项检索中的range查询,对上市时间在特定日期范围内的手机进行检索,其检索的代码和结果展示如图3.30所示。
基于Lucene的more_like_this查询,是为了检索与所提供的内容相似的文档结果集。这种查询方法也可以用来实现初步的信息推荐。例如,利用more_like_this方法,在天极手机产品数据集中的phoneName字段检索与“魅族PRO6Plus(64GB/双4G)”相似的数据集,其代码段展示以及结果如图3.31所示。
聚合是统计数据十分有力的工具,能够对数据集有一个宏观上的了解。下面使用metric aggregations中的extended_stats聚合对所有手机产品的售价进行统计,其代码和聚合结果如图3.32所示。
图3.30 对range查询的实现
图3.31 对more_like_this查询的实现
可使用bucket aggragations中的histogram聚合来为柱状图的生成提供元数据。下面针对不同价位的手机进行1000元一档的价位统计,相关代码段和结果展示如图3.33所示。
图3.32 对extended_stats聚合的实现
图3.33 对histogram聚合的实现
下面使用matrix aggregations中的matrix_stats聚合,对手机产品数据中,机身存储容量(rom字段)和手机售价(price字段)之间的关系进行计算。相关代码可参照代码段3.49,结果展示如图3.34所示。
图3.34 对matrix_stats聚合的实现