This post covers to use ElasticSearch-Hadoop to read data from Hadoop system and index that in ElasticSearch. The functionality it covers is to index product views count and top search query per customer in last n number of days. The analyzed data can further be used on website to display customer recently viewed, product views count and top search query string.
In continuation to the previous posts on
We already have customer search clicks data gathered using Flume and stored in Hadoop HDFS and ElasticSearch, and how to analyze same data using Hive and generate statistical data. Here we will further see how to use the analyzed data to enhance customer experience on website and make it relevant for the end customers.
We already have covered in first part, how we can use flume ElasticSearch sink to index the recently viewed items directory to ElasticSearch instance and the data can be used to display real time clicked items for the customer.
Elasticsearch for Apache Hadoop allows Hadoop jobs to interact with ElasticSearch with small library and easy setup.
Elasticsearch-hadoop-hive, allows to access ElasticSearch using Hive. As shared in previous post, we have product views count and also customer top search query data extracted in Hive tables. We will read and index the same data to ElasticSearch so that it can be used for display purpose on website.
Take a scenario to display each product total views by customer in the last n number of days. For better user experience, you can use the same functionality to display to end customer how other customer perceive the same product.
Select sample data from hive table:
1 |
# search.search_productviews : id, productid, viewcount |
2 |
61, 61, 15 |
3 |
48, 48, 8 |
4 |
16, 16, 40 |
5 |
85, 85, 7 |
Create Hive external table “search_productviews_to_es” to index data to ElasticSearch instance.
Execute the hive script in java to index product views data, HiveSearchClicksServiceImpl.java
The sample data in ElasticSearch index is stored as below:
1 |
{id= 48 , productid= 48 , viewcount= 10 } |
2 |
{id= 49 , productid= 49 , viewcount= 20 } |
3 |
{id= 5 , productid= 5 , viewcount= 18 } |
4 |
{id= 6 , productid= 6 , viewcount= 9 } |
Take a scenario, where you may want to display top search query string by a single customer or all the customers on the website. You can use the same to display top search query cloud on the website.
Select sample data from hive table:
1 |
# search.search_customerquery : id, querystring, count, customerid |
2 |
61_queryString59, queryString59, 5, 61 |
3 |
298_queryString48, queryString48, 3, 298 |
4 |
440_queryString16, queryString16, 1, 440 |
5 |
47_queryString85, queryString85, 1, 47 |
Create Hive external table “search_customerquery_to_es” to index data to ElasticSearch instance.
Execute the hive script in java to index data HiveSearchClicksServiceImpl.java
The topqueries index data on ElasticSearch instance is as shown below:
1 |
{id=474_queryString95, querystring=queryString95, querycount= 10 , customerid= 474 } |
2 |
{id=482_queryString43, querystring=queryString43, querycount= 5 , customerid= 482 } |
3 |
{id=482_queryString64, querystring=queryString64, querycount= 7 , customerid= 482 } |
4 |
{id=483_queryString6, querystring=queryString6, querycount= 2 , customerid= 483 } |
5 |
{id=487_queryString86, querystring=queryString86, querycount= 111 , customerid= 487 } |
6 |
{id=494_queryString67, querystring=queryString67, querycount= 1 , customerid= 494 } |
The functionality described above is only sample functionality and ofcourse need to be extended to map to specific business scenario. This may cover business scenario of displaying search query cloud to customers on website or for further Business Intelligence analytics.
Spring ElasticSearch for testing purpose has also been included to create ESRepository to count total records and delete All.
Check the service for details, ElasticSearchRepoServiceImpl.java
Total product views:
Customer top search queries:
In later posts we will cover to analyze the data further using scheduled jobs,
Reference: | ElasticSearch-Hadoop: Indexing product views count and customer top search query from Hadoop to ElasticSearchfrom our JCG partner Jaibeer Malik at the Jai’s Weblog blog. |