ElasticSearch-Hadoop:从Hadoop到ElasticSearch的产品视图计数索引和客户顶部搜索查询...

这篇文章涵盖了如何使用ElasticSearch-Hadoop从Hadoop系统读取数据并在ElasticSearch中对其进行索引。 它涵盖的功能是在最近n天中为每个客户的产品浏览量计数和热门搜索查询编制索引。 分析的数据可以进一步在网站上使用,以显示最近浏览过的客户,产品浏览次数和热门搜索查询字符串。

继续之前的文章

  • 客户产品搜索使用大数据进行点击分析 ,
  • Flume:使用Apache Flume收集客户产品搜索点击数据 ,
  • Hive:使用Apache Hive查询客户最喜欢的搜索查询和产品视图计数 。

我们已经有使用Flume收集并存储在Hadoop HDFS和ElasticSearch中的客户搜索点击数据,以及如何使用Hive分析相同数据并生成统计数据。 在这里,我们将进一步了解如何使用分析后的数据来增强网站上的客户体验并使之与最终客户相关。

最近浏览过的商品

我们已经在第一部分中介绍了如何使用水槽ElasticSearch接收器将最近查看的商品目录索引到ElasticSearch实例,以及如何使用数据为客户显示实时点击的商品。

弹性搜索-Hadoop

Elasticsearch for Apache Hadoop允许Hadoop作业通过小型库和易于设置的方式与ElasticSearch进行交互。

Elasticsearch-hadoop-hive,允许使用Hive访问ElasticSearch。 正如上一篇文章中所分享的那样,我们在Hive表中提取了产品视图计数以及客户排名最高的搜索查询数据。 我们将读取相同的数据并将其索引到ElasticSearch,以便将其用于网站上的显示目的。

elasticsearch-hadoop-hive

产品视图计数功能

采取一个方案来显示客户在最近n天中的每个产品总观看次数。 为了获得更好的用户体验,您可以使用相同的功能向最终客户显示其他客户对同一产品的看法。

蜂房数据用于产品视图

从配置单元表中选择示例数据:

# search.search_productviews : id, productid, viewcount
61, 61, 15
48, 48, 8
16, 16, 40
85, 85, 7

产品视图计数索引

创建Hive外部表“ search_productviews_to_es”以将数据索引到ElasticSearch实例。

Use search;
DROP TABLE IF EXISTS search_productviews_to_es;
CREATE EXTERNAL TABLE search_productviews_to_es (id STRING, productid BIGINT, viewcount INT) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = 'productviews/productview', 'es.nodes' = 'localhost', 'es.port' = '9210', 'es.input.json' = 'false', 'es.write.operation' = 'index', 'es.mapping.id' = 'id', 'es.index.auto.create' = 'yes');
INSERT OVERWRITE TABLE search_productviews_to_es SELECT qcust.id, qcust.productid, qcust.viewcount FROM search_productviews qcust;
  • 创建外部表search_productviews_to_es指向ES实例
  • 使用的ElasticSearch实例配置为localhost:9210
  • 索引“ productviews”和文档类型“ productview”将用于索引数据
  • 如果索引和mappin不存在,则会自动创建
  • 如果基于ID字段已经存在,则插入覆盖将覆盖数据。
  • 通过从另一个存储分析/统计数据的配置表“ search_productviews”中选择数据来插入数据。

执行Java中的Hive脚本以索引产品视图数据HiveSearchClicksServiceImpl.java

Collection<HiveScript> scripts = new ArrayList<>();HiveScript script = new HiveScript(new ClassPathResource("hive/load-search_productviews_to_es.q"));scripts.add(script);hiveRunner.setScripts(scripts);hiveRunner.call();

productviews索引样本数据

ElasticSearch索引中的样本数据存储如下:

{id=48, productid=48, viewcount=10}
{id=49, productid=49, viewcount=20}
{id=5, productid=5, viewcount=18}
{id=6, productid=6, viewcount=9}

客户热门搜索查询字符串功能

以一种情况为例,您可能希望显示单个客户或网站上所有客户的热门搜索查询字符串。 您可以使用它来显示网站上的热门搜索查询云。

Hive Data用于客户热门搜索查询

从配置单元表中选择示例数据:

# search.search_customerquery : id, querystring, count, customerid
61_queryString59, queryString59, 5, 61
298_queryString48, queryString48, 3, 298
440_queryString16, queryString16, 1, 440
47_queryString85, queryString85, 1, 47

客户热门搜索查询索引

创建Hive外部表“ search_customerquery_to_es”以将数据索引到ElasticSearch实例。

Use search;
DROP TABLE IF EXISTS search_customerquery_to_es;
CREATE EXTERNAL TABLE search_customerquery_to_es (id String, customerid BIGINT, querystring String, querycount INT) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = 'topqueries/custquery', 'es.nodes' = 'localhost', 'es.port' = '9210', 'es.input.json' = 'false', 'es.write.operation' = 'index', 'es.mapping.id' = 'id', 'es.index.auto.create' = 'yes');
INSERT OVERWRITE TABLE search_customerquery_to_es SELECT qcust.id, qcust.customerid, qcust.queryString, qcust.querycount FROM search_customerquery qcust;
  • 创建外部表search_customerquery_to_es指向ES实例
  • 使用的ElasticSearch实例配置为localhost:9210
  • 索引“ topqueries”和文档类型“ custquery”将用于索引数据
  • 如果索引和mappin不存在,则会自动创建
  • 如果基于ID字段已经存在,则插入覆盖将覆盖数据。
  • 通过从另一个存储分析/统计数据的配置单元表“ search_customerquery”中选择数据来插入数据。

在Java中执行Hive脚本以索引数据HiveSearchClicksServiceImpl.java

Collection<HiveScript> scripts = new ArrayList<>();HiveScript script = new HiveScript(new ClassPathResource("hive/load-search_customerquery_to_es.q"));scripts.add(script);hiveRunner.setScripts(scripts);hiveRunner.call();

topqueries索引样本数据

ElasticSearch实例上的topqueries索引数据如下所示:

{id=474_queryString95, querystring=queryString95, querycount=10, customerid=474}
{id=482_queryString43, querystring=queryString43, querycount=5, customerid=482}
{id=482_queryString64, querystring=queryString64, querycount=7, customerid=482}
{id=483_queryString6, querystring=queryString6, querycount=2, customerid=483}
{id=487_queryString86, querystring=queryString86, querycount=111, customerid=487}
{id=494_queryString67, querystring=queryString67, querycount=1, customerid=494}

上面描述的功能只是示例功能,当然需要扩展以映射到特定的业务场景。 这可能涵盖在网站上向客户显示搜索查询云或进一步进行商务智能分析的业务场景。

Spring数据

还包括用于测试目的的Spring ElasticSearch来创建ESRepository以对总记录进行计数并删除All。
检查服务以获取详细信息ElasticSearchRepoServiceImpl.java

产品总观看次数:

@Document(indexName = "productviews", type = "productview", indexStoreType = "fs", shards = 1, replicas = 0, refreshInterval = "-1")
public class ProductView {@Idprivate String id;@Versionprivate Long version;private Long productId;private int viewCount;......}public interface ProductViewElasticsearchRepository extends ElasticsearchCrudRepository<ProductView, String> { }long count = productViewElasticsearchRepository.count();

客户热门搜索查询:

@Document(indexName = "topqueries", type = "custquery", indexStoreType = "fs", shards = 1, replicas = 0, refreshInterval = "-1")
public class CustomerTopQuery {@Idprivate String id;@Versionprivate Long version;private Long customerId;private String queryString;private int count;......}public interface TopQueryElasticsearchRepository extends ElasticsearchCrudRepository<CustomerTopQuery, String> { }long count = topQueryElasticsearchRepository.count();

在以后的文章中,我们将介绍使用计划的作业进一步分析数据,

  • 使用Oozie计划针对配置单元分区进行协调的作业,并将作业捆绑以将数据索引到ElasticSearch。
  • 使用Pig来计算唯一客户总数等

翻译自: https://www.javacodegeeks.com/2014/05/elasticsearch-hadoop-indexing-product-views-count-and-customer-top-search-query-from-hadoop-to-elasticsearch.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

伸缩轨道_深度解析——伸缩喷漆房为什么这么受欢迎!

伸缩式喷漆房是一种环保喷漆设备&#xff0c;它可以在使用时&#xff0c;自动展开形成封闭或半封闭的环保喷漆房&#xff0c;不使用时收缩合拢到一处的特殊环保喷漆房设备&#xff0c;由于伸缩式喷漆房外观大方、简单实用且投资费用低&#xff0c;它在现代涂装应用中越发广泛。…

snippet,让你编码效率翻倍

为什么谈到Snippet 今天下午在用vscode做小程序的时候&#xff0c;发现很不方便&#xff0c;因为商店里提供的代码片段极为有限&#xff0c;而且平时几乎每天都需要用到代码片段&#xff0c;所以就在思考他们是怎么做到给别人提供代码的&#xff0c;我可以自定义代码片段吗。然…

day12-HTML基础之DOM操作

DOM&#xff08;Document Object Model 文档对象模型&#xff09; 一个web页面的展示&#xff0c;是由html标签组合成的一个页面&#xff0c;dom对象实际就是将html标签转换成了一个文档对象。可以通过dom对象中js提供的方法&#xff0c;找到html的各个标签。通过找到标签就可以…

小程序源码 租房管理系统_如何通过租房小程序开发快速引流

租房市场在整个房产市场占据了极大一部分市场份额&#xff0c;而随着租售同权政策的提出、房价的不断提升&#xff0c;租房市场份额将进一步扩大。合肥小程序开发智速新媒体公司传统的租房方式不管是出租方还是租房客户&#xff0c;彼此之间的消息不对等、沟通困难等因素导致房…

REST 101开发人员专用

本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别&#xff0c;使我们不必考虑内存地址。 诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 &#xff0c;使我们不必考虑一组相似功能的特定变体。 尽管有这些间…

一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼

小程序之前写的&#xff0c;也就前段时间&#xff0c;毛毛糙糙的写了第一版... 因为使用OPPO手机&#xff0c;所以有个锁屏杂志的东西&#xff0c;里面的图片每天都是由OPPO官方的人进行精选然后推送给用户的&#xff0c;图片菲菲菲菲菲常漂亮&#xff0c;看到网上很多人提取不…

SQLAlchemy 操作数据库

SQLAlchemy 操作数据库 SQLAlchemy为Python提供了不同数据库的统一接口&#xff0c;采用ORM的方式操作数据库&#xff0c;简洁优雅 一、安装 直接通过pip安装即可 pip install sqlalchemy 二、连接数据库 这里用小巧的sqlite来做测试 from sqlalchemy import create_engine# 创…

贝塞尔曲线理解与应用

贝塞尔曲线并非是由贝塞尔发明的&#xff0c;但是是因为他把这个东西应用到当时的汽车领域而闻名的&#xff0c;所以取名为贝塞尔曲线。 在我看来&#xff0c;用简单的话来理解一下贝塞尔曲线&#xff0c;他是通过少量几个点&#xff0c;使用一套公式&#xff0c;生成一条平滑曲…

云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server

【阿里云ECS】&#xff08;一&#xff09;云服务器上安装RStudio-server最近注册了阿里云个人版&#xff0c;打算研究研究shiny部署问题。进了阿里云ECS因为是Ubuntu16.04的对于安装R和RStudio还是要学习实践一下的。第一步&#xff0c;安装R语言。我们使用apt的方式进行安装,步…

H5前期知识点总结 9月12日

知识点补充&#xff1a; 属性继承例子&#xff0c;color、font&#xff08;font-size/style/family/weight&#xff09; 1、浏览器的默认字体大小是16px,谷歌浏览器的最小字体是10px,其他浏览器的最小字体是12px。 2、通配符选择器 “*”&#xff0c;即选中body里所有的标签。 …

Spring MVC:Ajax和JQuery

今天&#xff0c;我想演示如何将AJAX集成到Spring MVC应用程序中。 我将在客户端使用JQuery来发送请求和接收响应。 本教程将基于我以前关于Spring MVC和REST服务的教程之一。 在本文中&#xff0c;您将了解如何在异步请求的帮助下使Web应用程序更具交互性。 准备工作 我需要通…

手把手带你写一个JavaScript类型判断小工具

业务写了很多&#xff0c;依然不是前端大神&#xff0c;我相信这是很多‘入坑’前端开发同学的迷茫之处&#xff0c;个人觉得前端职业发展是有路径可寻的&#xff0c;前期写业务是一个积累过程&#xff0c;后期提炼总结&#xff0c;比如编程思想&#xff0c;父子类的原型继承&a…

yolov3之pytorch源码解析_springmvc源码架构解析之view

说在前面前期回顾sharding-jdbc源码解析 更新完毕spring源码解析 更新完毕spring-mvc源码解析 更新完毕spring-tx源码解析 更新完毕spring-boot源码解析 更新完毕rocketmq源码解析 更新完毕dubbbo源码解析 更新完毕netty源码解析 更新完毕spring源码架构更新完毕springmvc源码架…

Xstream将XML转换为javabean的问题

1.问题&#xff1a;Xstream is not security 解决方法&#xff1a;加上 2.问题&#xff1a;如果没有第二行代码&#xff0c;会出现xstream forbiddenclassexception 解决方法&#xff1a;加上第二行&#xff0c;其中参数是要进行解析的对象&#xff01; 调用该方法&#xff1a;…

蚂蚁属性细微差别

每隔一段时间&#xff0c;我会想起Ant属性的一些细微差别 &#xff0c;一旦忘记它们&#xff0c;在与Ant交互时会引起混乱。 特别是&#xff0c; Ant属性 通常是不可变的 &#xff08;不包括Ant 1.8版本的 局部属性 &#xff09;&#xff0c;并且在其首次设置时“永久”设置&am…

《从零构建前后分离的web项目》准备 - 前端了解过关了吗?

前端基础架构和硬核介绍 技术栈的选择 首先我们构建前端架构需要对前端生态圈有一切了解&#xff0c;并且最好带有一定的技术前瞻性&#xff0c;好的技术架构可能日后会方便的扩展&#xff0c;减少重构的次数&#xff0c;即使重构也不需要大动干戈&#xff0c;我通常选型技术栈…

联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...

前言&#xff1a;笔记本电脑&#xff0c;主要分为三种&#xff1a;轻薄本<全能本<游戏本。轻薄本&#xff0c;又称办公笔记本电脑&#xff0c;因为轻薄方便携带&#xff0c;通常用于移动办公使用。全能本&#xff0c;就是把轻薄本的集显变成了小独显&#xff0c;增加了独…

【BZOJ 1098】办公楼(补图连通块个数,Bfs)

补图连通块个数这大概是一个套路吧&#xff0c;我之前没有见到过&#xff0c;想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法&#xff0c;但进行巧妙的实现&#xff0c;就可以分析出它的上界不会超过 $O(n m)$。 接下来介绍一下这个技巧&#xff1a; 很显然一个…

Spring MVC:资源

我从博客读者那里收到的最常见的问题之一是如何在Spring MVC的应用程序中使用CSS和javascript文件。 因此&#xff0c;这是撰写有关Spring MVC中资源使用情况的文章的好机会。 通常&#xff0c;我将使用基于Java的配置方法。 如今&#xff0c;很难想象没有CSS和JavaScript文件…

c语言读文件空格间隔,c语言文件流实现按单个词读取(以空格、分号等作间隔)...

c语言文件流实现按词读取(以空格、分号等作间隔)1.基本描述在之前的作业中&#xff0c;认真编写代码&#xff0c;从中发现不少知识积累上的欠缺。编程中使用到的c语言文件读取&#xff0c;要求是按照获取到一个完整的词&#xff0c;并对其进行处理。写有java或c语言源程序的.tx…