From 2740acc6b2be0a9ad2ed0e2520815566f951b2a1 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 19 Nov 2013 15:01:39 +0000 Subject: [PATCH 01/14] cambios iniciales --- examples/reuters/index.html | 21 +++++---------- examples/reuters/js/reuters.js | 27 +++++++++---------- examples/reuters/widgets/ResultWidget.js | 34 +++++++++++++++--------- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/examples/reuters/index.html b/examples/reuters/index.html index 1088e3fa..4ea12913 100644 --- a/examples/reuters/index.html +++ b/examples/reuters/index.html @@ -27,8 +27,8 @@
@@ -51,18 +51,11 @@

Search

-

Top Topics

-
- -

Top Organisations

-
- -

Top Exchanges

-
- -

By Country

-
-
+

Most commun Words

+
+ +

Most commun Users

+

By Date

diff --git a/examples/reuters/js/reuters.js b/examples/reuters/js/reuters.js index 99a0cf3d..3b602ef0 100644 --- a/examples/reuters/js/reuters.js +++ b/examples/reuters/js/reuters.js @@ -1,10 +1,11 @@ +var ip = location.host; var Manager; (function ($) { $(function () { Manager = new AjaxSolr.Manager({ - solrUrl: 'http://evolvingweb.ca/solr/reuters/' + solrUrl: 'http://' + ip + ':8983/solr/collection1/' }); Manager.addWidget(new AjaxSolr.ResultWidget({ id: 'result', @@ -20,7 +21,8 @@ var Manager; $('#pager-header').html($('').text('displaying ' + Math.min(total, offset + 1) + ' to ' + Math.min(total, offset + perPage) + ' of ' + total)); } })); - var fields = [ 'topics', 'organisations', 'exchanges' ]; + /*var fields = ['comment_id', 'comment_order', 'comment_karma', 'comment_randkey', 'comment_date', 'comment_user_id', 'comment_link_id', 'comment_content', 'comment_votes', 'comment_parent' ];*/ + var fields = ['comment_content', 'comment_user_id' ]; for (var i = 0, l = fields.length; i < l; i++) { Manager.addWidget(new AjaxSolr.TagcloudWidget({ id: fields[i], @@ -32,33 +34,30 @@ var Manager; id: 'currentsearch', target: '#selection' })); + Manager.addWidget(new AjaxSolr.AutocompleteWidget({ id: 'text', target: '#search', - fields: [ 'topics', 'organisations', 'exchanges' ] - })); - Manager.addWidget(new AjaxSolr.CountryCodeWidget({ - id: 'countries', - target: '#countries', - field: 'countryCodes' + fields: [ 'comment_id', 'comment_content'] })); + Manager.addWidget(new AjaxSolr.CalendarWidget({ id: 'calendar', target: '#calendar', - field: 'date' + field: 'comment_date' })); Manager.init(); Manager.store.addByValue('q', '*:*'); var params = { facet: true, - 'facet.field': [ 'topics', 'organisations', 'exchanges', 'countryCodes' ], + 'facet.field': ['comment_id', 'comment_order', 'comment_karma', 'comment_randkey', 'comment_date', 'comment_user_id', 'comment_link_id', 'comment_content', 'comment_votes', 'comment_parent' ], 'facet.limit': 20, 'facet.mincount': 1, 'f.topics.facet.limit': 50, - 'f.countryCodes.facet.limit': -1, - 'facet.date': 'date', - 'facet.date.start': '1987-02-26T00:00:00.000Z/DAY', - 'facet.date.end': '1987-10-20T00:00:00.000Z/DAY+1DAY', + // 'f.countryCodes.facet.limit': -1, + 'facet.date': 'comment_date', + 'facet.date.start': '2007-01-01T00:00:00.000Z/DAY', + 'facet.date.end': '2007-12-31T00:00:00.000Z/DAY+1DAY', 'facet.date.gap': '+1DAY', 'json.nl': 'map' }; diff --git a/examples/reuters/widgets/ResultWidget.js b/examples/reuters/widgets/ResultWidget.js index 51b16ff0..346efcc2 100644 --- a/examples/reuters/widgets/ResultWidget.js +++ b/examples/reuters/widgets/ResultWidget.js @@ -43,10 +43,18 @@ AjaxSolr.ResultWidget = AjaxSolr.AbstractWidget.extend({ $(this.target).append(this.template(doc)); var items = []; - items = items.concat(this.facetLinks('topics', doc.topics)); - items = items.concat(this.facetLinks('organisations', doc.organisations)); - items = items.concat(this.facetLinks('exchanges', doc.exchanges)); - + items = items.concat(this.facetLinks('comment_id', doc.comment_id)); + items = items.concat(this.facetLinks('comment_order', doc.comment_order)); + items = items.concat(this.facetLinks('comment_karma', doc.comment_karma)); + items = items.concat(this.facetLinks('comment_randkey', doc.comment_randkey)); + items = items.concat(this.facetLinks('comment_date', doc.comment_date)); + items = items.concat(this.facetLinks('comment_user_id', doc.comment_user_id)); + items = items.concat(this.facetLinks('comment_link_id', doc.comment_link_id)); + items = items.concat(this.facetLinks('comment_content', doc.comment_content)); + items = items.concat(this.facetLinks('comment_votes', doc.comment_votes)); + items = items.concat(this.facetLinks('comment_parent', doc.comment_parent)); + + var $links = $('#links_' + doc.id); $links.empty(); for (var j = 0, m = items.length; j < m; j++) { @@ -57,18 +65,20 @@ AjaxSolr.ResultWidget = AjaxSolr.AbstractWidget.extend({ template: function (doc) { var snippet = ''; - if (doc.text.length > 300) { - snippet += doc.dateline + ' ' + doc.text.substring(0, 300); - snippet += '' + doc.text.substring(300); + snippet += doc.comment_date + ' -- User id: ' + doc.comment_user_id +'' + if (doc.comment_content.length > 300) { + snippet += doc.comment_content.substring(0, 300); + snippet += '' + doc.comment_content.substring(300); snippet += ' more'; } else { - snippet += doc.dateline + ' ' + doc.text; + snippet += doc.comment_content; } - var output = '

' + doc.title + '

'; - output += ''; - output += '

' + snippet + '

'; + var output = '

' + doc.comment_id + '

'; + output += ''; + output += '

' + snippet + '

'; + output += 'Votes: ' + doc.comment_votes + ' -- Order: ' + doc.comment_order + ' -- Karma: ' + doc.comment_karma + '
'; return output; }, @@ -91,4 +101,4 @@ AjaxSolr.ResultWidget = AjaxSolr.AbstractWidget.extend({ } }); -})(jQuery); \ No newline at end of file +})(jQuery); From 4848ed3a514a5395dc398e45bce3273d548903b4 Mon Sep 17 00:00:00 2001 From: vvillena Date: Tue, 26 Nov 2013 15:34:19 +0100 Subject: [PATCH 02/14] histogram widget 1.0 --- examples/reuters/css/reuters.css | 10 ++ examples/reuters/css/reuters.css~ | 160 ++++++++++++++++++++ examples/reuters/index.html | 4 + examples/reuters/js/reuters.js | 6 + examples/reuters/widgets/HistogramWidget.js | 117 ++++++++++++++ 5 files changed, 297 insertions(+) create mode 100644 examples/reuters/css/reuters.css~ create mode 100644 examples/reuters/widgets/HistogramWidget.js diff --git a/examples/reuters/css/reuters.css b/examples/reuters/css/reuters.css index 3b7dd0ab..9a3580eb 100644 --- a/examples/reuters/css/reuters.css +++ b/examples/reuters/css/reuters.css @@ -158,3 +158,13 @@ font-size: 170%; a.tagcloud_size_10 { font-size: 180%; } + +/*histogram*/ + +div.bar { + display: inline-block; + width: 20px; + height: 75px; + background-color: teal; + margin-right: 2px; + } diff --git a/examples/reuters/css/reuters.css~ b/examples/reuters/css/reuters.css~ new file mode 100644 index 00000000..3b7dd0ab --- /dev/null +++ b/examples/reuters/css/reuters.css~ @@ -0,0 +1,160 @@ +* { + padding: 0; + margin: 0; +} + +body { + background: #fff url(../images/header.gif) repeat-x; + color: #333; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + line-height: 18px; +} +img { + border: none; +} +a { + color: #6998f0; + text-decoration: none; +} +a:hover { + color: #000; + text-decoration: underline; +} + +#wrap { + width: 1000px; + margin: 0px auto; +} +.clear { + clear: both; +} + +/* header */ + +#header { + height: 90px; +} +#header h1 { + padding: 20px 0 5px 10px; + font-size: 20px; + letter-spacing: -2px; +} +#header h2 { + padding-left: 10px; + color: #666; + font-size: 14px; + font-weight: 100; +} + +/* right */ + +.right { + float: right; + width: 538px; + padding: 10px 20px 10px 40px; + border-left: 1px solid #aaa; + text-align: justify; +} +.right h2 { + padding: 15px 0 5px 0; + color: #B4241B; + font-size: 20px; + font-weight: 100; + letter-spacing: -2px; +} +#result a { + margin-right: 5px; +} +#navigation { + border-bottom: 1px solid #000; +} +#pager, +#pager-header { + display: inline; +} +#pager li, +.links li { + list-style-type: none; + display: inline; +} +#selection { + padding: 10px 15px 0; +} +#selection li { + list-style-type: none; +} +#docs { + padding-top: 1px; +} + +/* left */ + +.left { + float: left; + width: 390px; + padding: 0 0 10px 10px; +} +.left h2 { + clear: left; + padding-top: 20px; + color: #333; + font-size: 13px; +} +#search input { + width: 350px; +} +#calendar { + width: 160px; +} +#search_help { + font-size: 80%; +} +.tagcloud { + padding: 10px 15px 0; +} +.tagcloud_item { + float: left; + display: block; + margin-right: 4px; + color: #6998f0; +} +.tagcloud_item:hover { + color: #f00; +} + +/* tagcloud */ + +a.tagcloud_size_0 { +font-size: 80%; +} +a.tagcloud_size_1 { +font-size: 90%; +} +a.tagcloud_size_2 { +font-size: 100%; +}Rst +a.tagcloud_size_3 { +font-size: 110%; +} +a.tagcloud_size_4 { +font-size: 120%; +} +a.tagcloud_size_5 { +font-size: 130%; +} +a.tagcloud_size_6 { +font-size: 140%; +} +a.tagcloud_size_7 { +font-size: 150% +} +a.tagcloud_size_8 { +font-size: 160%; +} +a.tagcloud_size_9 { +font-size: 170%; +} +a.tagcloud_size_10 { +font-size: 180%; +} diff --git a/examples/reuters/index.html b/examples/reuters/index.html index 4ea12913..c82edd24 100644 --- a/examples/reuters/index.html +++ b/examples/reuters/index.html @@ -23,6 +23,7 @@ +
@@ -59,6 +60,9 @@

Most commun Users

By Date

+ +

Histogram

+
diff --git a/examples/reuters/js/reuters.js b/examples/reuters/js/reuters.js index 3b602ef0..d509c3e8 100644 --- a/examples/reuters/js/reuters.js +++ b/examples/reuters/js/reuters.js @@ -41,6 +41,12 @@ var Manager; fields: [ 'comment_id', 'comment_content'] })); + Manager.addWidget(new AjaxSolr.HistogramWidget({ + id: 'histogram', + target: '#histogram', + field: 'comment_date' + })); + Manager.addWidget(new AjaxSolr.CalendarWidget({ id: 'calendar', target: '#calendar', diff --git a/examples/reuters/widgets/HistogramWidget.js b/examples/reuters/widgets/HistogramWidget.js new file mode 100644 index 00000000..65f98cb9 --- /dev/null +++ b/examples/reuters/widgets/HistogramWidget.js @@ -0,0 +1,117 @@ +(function ($) { + + +AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ + afterRequest: function () { + var self = this; + + var maxCount = 0; + var objectedItems = []; + + for (var facet in this.manager.response.facet_counts.facet_dates[this.field]) { + var count = parseInt(this.manager.response.facet_counts.facet_dates[this.field][facet]); + if (count > maxCount) { + maxCount = count; + } + if (facet.substr(0,1) == '2') + { + objectedItems.push({ facet: facet, count: count }); + } + } + + if (objectedItems.length >= 1) + { + var months = []; + var facets = []; + var maxMonths = 12; + var monthAct = objectedItems[0].facet.substr(0,7); + var monthAcum = 0; + var monthAcumMax = 0; + for (var i=0; i monthAct) + { + if (monthAcum > monthAcumMax) + { + monthAcumMax = monthAcum; + } + facets.push(monthAcum); + monthAcum = 0; + months.push(monthAct); + monthAct = objectedItems[i].facet.substr(0,7); + if (months.length >= 12) + { + break; + } + } + } + + var w = 600; + var h = 300; + var n = maxMonths; + var s = parseInt(monthAcumMax/h); + + //definimos el elemento svg + var svg = d3.select("#histogram") + .html("") + .append("svg") + .attr("width", w) + .attr("height", h); + + //segun los datos de "facets", creamos las barras verticales + svg.selectAll("rect") + .data(facets) + .enter() + .append("rect") + .attr("x", function(d, i) {return i*((w/n)+1);}) + //.attr("x", function(d, i) {return i*21;}) + .attr("y", function(d) {return h - (d/s);}) + .attr("width", w/n - 1) + .attr("height", function(d) {return (d/s);}) + .attr("fill", function(d) { + return "rgb(0,0, " + (255) + ")"; + }); + + //dado que en months tenemos las fechas en formato yyyy-mm, mostramos + //un texto encima de cada barra, que dice a que fecha corresponse + svg.selectAll("text") + .data(months) + .enter() + .append("text") + .text(function(d) { + return d; + }) + .attr("x", function(d, i) { + return i * (w / n) + 6; + }) + .attr("y", function(d) { + return h*0.1; + }) + .attr("fill", "green") + .attr("font-size", "12"); + + //definimos un elemento de escala de 0 al mes con el mayor número + //de posts + var yScale = d3.scale.linear() + .domain([0, monthAcumMax]) + .range([h - 0, 0]); + + //definimos un elemento de eje, le decimos la escala que hemos + //definido antes + var yAxis = d3.svg.axis() + .scale(yScale) + .orient("right") + .ticks(9); + + //añadimos a svg el eje que hemos definido + svg.append("g") + .attr("class", "axis") + .attr("transform", "translate(" + w - 20 + ",0)") + .call(yAxis); + + } + } +}); + +})(jQuery); From aa4ae48845178924fe08ff64aed58ba2c86c65d7 Mon Sep 17 00:00:00 2001 From: vvillena Date: Tue, 26 Nov 2013 15:48:40 +0100 Subject: [PATCH 03/14] added d3js library --- examples/reuters/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/reuters/index.html b/examples/reuters/index.html index c82edd24..b61220d8 100644 --- a/examples/reuters/index.html +++ b/examples/reuters/index.html @@ -24,6 +24,7 @@ +
From 05db96bbff9210c7f555e13c7baf2544b3de9d40 Mon Sep 17 00:00:00 2001 From: LolaUPF Date: Tue, 26 Nov 2013 16:27:30 +0100 Subject: [PATCH 04/14] Change date ranges for histogram --- examples/reuters/js/reuters.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/reuters/js/reuters.js b/examples/reuters/js/reuters.js index d509c3e8..57cf4b9c 100644 --- a/examples/reuters/js/reuters.js +++ b/examples/reuters/js/reuters.js @@ -1,4 +1,4 @@ -var ip = location.host; +var ip = location.hostname; var Manager; (function ($) { @@ -62,8 +62,8 @@ var Manager; 'f.topics.facet.limit': 50, // 'f.countryCodes.facet.limit': -1, 'facet.date': 'comment_date', - 'facet.date.start': '2007-01-01T00:00:00.000Z/DAY', - 'facet.date.end': '2007-12-31T00:00:00.000Z/DAY+1DAY', + 'facet.date.start': '2005-12-01T00:00:00.000Z/DAY', + 'facet.date.end': '2006-12-31T00:00:00.000Z/DAY+1DAY', 'facet.date.gap': '+1DAY', 'json.nl': 'map' }; From dba6e37c7ce73ae4f0254d24bfd76b61473bd29b Mon Sep 17 00:00:00 2001 From: LolaUPF Date: Wed, 11 Dec 2013 20:52:24 +0100 Subject: [PATCH 05/14] Code for facet.pivot added\n TrialPivots implements the code which it can be found in AbstractFaceWidget.js. In Google Chrome looks to work properly --- core/AbstractFacetWidget.js | 72 ++++++++++++++++++++++--- examples/reuters/index.html | 6 +++ examples/reuters/js/reuters.js | 17 +++++- examples/reuters/widgets/TrialPivots.js | 6 +++ 4 files changed, 92 insertions(+), 9 deletions(-) create mode 100644 examples/reuters/widgets/TrialPivots.js diff --git a/core/AbstractFacetWidget.js b/core/AbstractFacetWidget.js index 9e5ca337..b51d5565 100644 --- a/core/AbstractFacetWidget.js +++ b/core/AbstractFacetWidget.js @@ -7,6 +7,7 @@ } }(function () { + /** * Baseclass for all facet widgets. * @@ -82,6 +83,16 @@ AjaxSolr.AbstractFacetWidget = AjaxSolr.AbstractWidget.extend( 'facet.range.include' ]); } + /*************************** + * Added new parameter for facet.pivot: according to the documentation + * there is only facet.pivot.mincount + * ************************/ + else if (this['facet.pivot'] !== undefined) { + this.manager.store.addByValue('facet.pivot', this.field); + parameters = parameters.concat([ + 'facet.pivot.mincount', + ]); + } for (var i = 0, l = parameters.length; i < l; i++) { if (this[parameters[i]] !== undefined) { @@ -183,19 +194,42 @@ AjaxSolr.AbstractFacetWidget = AjaxSolr.AbstractWidget.extend( else if (this['facet.range'] !== undefined) { property = 'facet_ranges'; } + else if (this['facet.pivot'] !== undefined) { + property = 'facet_pivot'; + } if (property !== undefined) { - switch (this.manager.store.get('json.nl').val()) { - case 'map': - return this.getFacetCountsMap(property); - case 'arrarr': - return this.getFacetCountsArrarr(property); - default: - return this.getFacetCountsFlat(property); - } + /* ------------------------------------------------------------------------------------------------- + New If added to control the case of the facet_pivots: we do not know how the + * json.nl value would affect pivots, therefore this special case. + -----------------------------------------*/ + if (property==='facet_pivot'){ + return this.getPivotCountsMap(property); + }else{ + //--------------------------------------------------------------------------------------------------- + switch (this.manager.store.get('json.nl').val()) { + case 'map': + return this.getFacetCountsMap(property); + case 'arrarr': + return this.getFacetCountsArrarr(property); + default: + return this.getFacetCountsFlat(property); + } + } } throw 'Cannot get facet counts unless one of the following properties is set to "true" on widget "' + this.id + '": "facet.field", "facet.date", or "facet.range".'; }, +/** ---------------------------------------------------------------------------- + * Used "if" it is facet.pivot data. + * + * * @param {JSON} as the solr output for facet.pivots. + * @returns {Map} A map associating to each key an array of two elements (total count, and another map), + * or the count. + */ + getPivotCountsMap: function (property) { + return parse_pivots(this.manager.response.facet_counts[property][this.field]); + }, + /** * Used if the facet counts are represented as a JSON object. * @@ -290,4 +324,26 @@ AjaxSolr.AbstractFacetWidget = AjaxSolr.AbstractWidget.extend( } }); +/********************************* + * Method for parsing pivots output: it works recursively such that at each level + * which has a new pivot the ouput will indicate the counts and then the map of other results. + * It follows the same structure than the solr ourput. + * + * @param {JSON} as the solr output for facet.pivots. + * @returns {Map} A map associating to each key an array of two elements (total count, and another map), + * or the count. + * + * *********************************/ +function parse_pivots(data_input){ + var output = {} + for (var i = 0, l = data_input.length; i < l; i++) { + if ("pivot" in data_input[i]){ + output[data_input[i]["value"]] = [data_input[i]["count"],parse_pivots(data_input[i]["pivot"])]; + } else { + output[data_input[i]["value"]] = data_input[i]["count"]; + } + } + return output +} +/********************************************************/ })); diff --git a/examples/reuters/index.html b/examples/reuters/index.html index b61220d8..e3a90558 100644 --- a/examples/reuters/index.html +++ b/examples/reuters/index.html @@ -24,6 +24,7 @@ + @@ -64,6 +65,11 @@

By Date

Histogram

+ + +

Trial Pivots

+
+
diff --git a/examples/reuters/js/reuters.js b/examples/reuters/js/reuters.js index 57cf4b9c..917a5640 100644 --- a/examples/reuters/js/reuters.js +++ b/examples/reuters/js/reuters.js @@ -11,6 +11,8 @@ var Manager; id: 'result', target: '#docs' })); + + Manager.addWidget(new AjaxSolr.PagerWidget({ id: 'pager', target: '#pager', @@ -47,11 +49,23 @@ var Manager; field: 'comment_date' })); + //************** new widget trial pivots ******************** + + Manager.addWidget(new AjaxSolr.TrialPivots({ + id: 'trial_pivots', + target: '#trial_pivots', + field: 'user_sex,user_age,comment_karma', + 'facet.pivot': true + })); + // ********************************************************** + Manager.addWidget(new AjaxSolr.CalendarWidget({ id: 'calendar', target: '#calendar', field: 'comment_date' })); + + Manager.init(); Manager.store.addByValue('q', '*:*'); var params = { @@ -60,11 +74,12 @@ var Manager; 'facet.limit': 20, 'facet.mincount': 1, 'f.topics.facet.limit': 50, - // 'f.countryCodes.facet.limit': -1, 'facet.date': 'comment_date', 'facet.date.start': '2005-12-01T00:00:00.000Z/DAY', 'facet.date.end': '2006-12-31T00:00:00.000Z/DAY+1DAY', 'facet.date.gap': '+1DAY', + //************** new line for trial pivot ******************************* + 'facet.pivot':'user_sex,user_age,comment_karma', 'json.nl': 'map' }; for (var name in params) { diff --git a/examples/reuters/widgets/TrialPivots.js b/examples/reuters/widgets/TrialPivots.js new file mode 100644 index 00000000..4217d61c --- /dev/null +++ b/examples/reuters/widgets/TrialPivots.js @@ -0,0 +1,6 @@ +(function ($) { + +AjaxSolr.TrialPivots = AjaxSolr.AbstractFacetWidget.extend({ + afterRequest: function () { + var result=this.getFacetCounts(); +})(jQuery); From 7278871bf32e0659ced13fc0bf489919bca7dae7 Mon Sep 17 00:00:00 2001 From: vvillena Date: Sun, 15 Dec 2013 13:42:15 +0100 Subject: [PATCH 06/14] pivots --- examples/reuters/index.html | 22 +++ examples/reuters/js/reuters.js | 8 +- examples/reuters/js/reuters.js~ | 86 ++++++++++ examples/reuters/widgets/HistogramWidget.js | 180 +++++++++++++++++--- 4 files changed, 268 insertions(+), 28 deletions(-) create mode 100644 examples/reuters/js/reuters.js~ diff --git a/examples/reuters/index.html b/examples/reuters/index.html index b61220d8..bce92aa7 100644 --- a/examples/reuters/index.html +++ b/examples/reuters/index.html @@ -25,6 +25,28 @@ +
diff --git a/examples/reuters/js/reuters.js b/examples/reuters/js/reuters.js index 57cf4b9c..bda2f088 100644 --- a/examples/reuters/js/reuters.js +++ b/examples/reuters/js/reuters.js @@ -1,4 +1,5 @@ -var ip = location.hostname; +//var ip = location.hostname; +var ip = "localhost"; var Manager; (function ($) { @@ -44,7 +45,7 @@ var Manager; Manager.addWidget(new AjaxSolr.HistogramWidget({ id: 'histogram', target: '#histogram', - field: 'comment_date' + fields: ['comment_date', 'comment_hour'] })); Manager.addWidget(new AjaxSolr.CalendarWidget({ @@ -52,11 +53,12 @@ var Manager; target: '#calendar', field: 'comment_date' })); + Manager.init(); Manager.store.addByValue('q', '*:*'); var params = { facet: true, - 'facet.field': ['comment_id', 'comment_order', 'comment_karma', 'comment_randkey', 'comment_date', 'comment_user_id', 'comment_link_id', 'comment_content', 'comment_votes', 'comment_parent' ], + 'facet.field': ['comment_id', 'comment_order', 'comment_karma', 'comment_randkey', 'comment_date', 'comment_user_id', 'comment_link_id', 'comment_content', 'comment_votes', 'comment_parent', 'comment_hour' ], 'facet.limit': 20, 'facet.mincount': 1, 'f.topics.facet.limit': 50, diff --git a/examples/reuters/js/reuters.js~ b/examples/reuters/js/reuters.js~ new file mode 100644 index 00000000..56361ca1 --- /dev/null +++ b/examples/reuters/js/reuters.js~ @@ -0,0 +1,86 @@ +//var ip = location.host; +var Manager; + +(function ($) { + + $(function () { + Manager = new AjaxSolr.Manager({ + //solrUrl: 'http://' + ip + ':8983/solr/collection1/' + solrUrl: 'http://localhost:8983/solr/collection1/' + }); + Manager.addWidget(new AjaxSolr.ResultWidget({ + id: 'result', + target: '#docs' + })); + Manager.addWidget(new AjaxSolr.PagerWidget({ + id: 'pager', + target: '#pager', + prevLabel: '<', + nextLabel: '>', + innerWindow: 1, + renderHeader: function (perPage, offset, total) { + $('#pager-header').html($('').text('displaying ' + Math.min(total, offset + 1) + ' to ' + Math.min(total, offset + perPage) + ' of ' + total)); + } + })); + /*var fields = ['comment_id', 'comment_order', 'comment_karma', 'comment_randkey', 'comment_date', 'comment_user_id', 'comment_link_id', 'comment_content', 'comment_votes', 'comment_parent' ];*/ + var fields = ['comment_content', 'comment_user_id' ]; + for (var i = 0, l = fields.length; i < l; i++) { + Manager.addWidget(new AjaxSolr.TagcloudWidget({ + id: fields[i], + target: '#' + fields[i], + field: fields[i] + })); + } + Manager.addWidget(new AjaxSolr.CurrentSearchWidget({ + id: 'currentsearch', + target: '#selection' + })); + + Manager.addWidget(new AjaxSolr.AutocompleteWidget({ + id: 'text', + target: '#search', + fields: [ 'comment_id', 'comment_content'] + })); + + Manager.addWidget(new AjaxSolr.HistogramWidget({ + id: 'histogram', + target: '#histogram', + field: 'comment_date' + })); + + Manager.addWidget(new AjaxSolr.CalendarWidget({ + id: 'calendar', + target: '#calendar', + field: 'comment_date' + })); + Manager.init(); + Manager.store.addByValue('q', '*:*'); + var params = { + facet: true, + 'facet.field': ['comment_id', 'comment_order', 'comment_karma', 'comment_randkey', 'comment_date', 'comment_user_id', 'comment_link_id', 'comment_content', 'comment_votes', 'comment_parent' ], + 'facet.limit': 20, + 'facet.mincount': 1, + 'f.topics.facet.limit': 50, + // 'f.countryCodes.facet.limit': -1, + 'facet.date': 'comment_date', + 'facet.date.start': '2007-01-01T00:00:00.000Z/DAY', + 'facet.date.end': '2007-12-31T00:00:00.000Z/DAY+1DAY', + 'facet.date.gap': '+1DAY', + 'json.nl': 'map' + }; + for (var name in params) { + Manager.store.addByValue(name, params[name]); + } + Manager.doRequest(); + }); + + $.fn.showIf = function (condition) { + if (condition) { + return this.show(); + } + else { + return this.hide(); + } + } + +})(jQuery); diff --git a/examples/reuters/widgets/HistogramWidget.js b/examples/reuters/widgets/HistogramWidget.js index 65f98cb9..d226f654 100644 --- a/examples/reuters/widgets/HistogramWidget.js +++ b/examples/reuters/widgets/HistogramWidget.js @@ -1,15 +1,21 @@ (function ($) { + AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ afterRequest: function () { var self = this; + + + //alert("cargando"); + var maxCount = 0; var objectedItems = []; - for (var facet in this.manager.response.facet_counts.facet_dates[this.field]) { - var count = parseInt(this.manager.response.facet_counts.facet_dates[this.field][facet]); + + for (var facet in this.manager.response.facet_counts.facet_dates[this.fields[0]]) { + var count = parseInt(this.manager.response.facet_counts.facet_dates[this.fields[0]][facet]); if (count > maxCount) { maxCount = count; } @@ -19,17 +25,31 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ } } - if (objectedItems.length >= 1) + + var w = 360; + var h = 300; + var n; + var s; + var months = []; + var facets = []; + var maxMonths = 12; + var monthAct; + var monthAnt; + var monthAcum = 0; + var monthAcumMax = 0; + var facets2 = [0,0,0,0,0,0,0,0,0,0,0,0], months2 = [0,0,0,0,0,0,0,0,0,0,0,0]; + var num2 = 1; + + if (objectedItems.length > 1) { - var months = []; - var facets = []; - var maxMonths = 12; - var monthAct = objectedItems[0].facet.substr(0,7); - var monthAcum = 0; - var monthAcumMax = 0; + + monthAct = objectedItems[0].facet.substr(0,7); + monthAnt = monthAct; + for (var i=0; i monthAct) { if (monthAcum > monthAcumMax) @@ -39,33 +59,141 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ facets.push(monthAcum); monthAcum = 0; months.push(monthAct); + monthAnt = monthAct; monthAct = objectedItems[i].facet.substr(0,7); - if (months.length >= 12) + + if (months.length >= 11) { break; } } } - var w = 600; - var h = 300; - var n = maxMonths; - var s = parseInt(monthAcumMax/h); + //fill the gap betweens months + + facets2[0] = facets[0]; + months2[0] = months[0]; + + var dateAnt, dateAct + for (var i=0; i0) + { + if (parseInt(dateAct.substr(5,2)) > (parseInt(dateAnt.substr(5,2)) + 1)) + { + var dataGap = dateAnt; + + while(parseInt(dataGap.substr(5,2)) < parseInt(dateAct.substr(5,2))) + { + facets2[num2] = 0; + months2[num2] = dataGap; + num2++; + if (num2 == 12) + { + break; + } + dataGap = dataGap.substr(0,4) + '-' + (parseInt(dataGap.substr(5,2)) + 1); + } + } + else if (parseInt(dateAct.substr(5,2)) == (parseInt(dateAnt.substr(5,2)) + 1)) + { + facets2[num2] = facets[i]; + months2[num2] = months[i]; + num2++; + if (num2 == 12) + { + break; + } + } + } + } + else + { + facets2[num2] = 0; + months2[num2] = months2[num2-1].substr(0,4) + '-' + (parseInt(months2[num2-1].substr(5,2)) + 1); + num2++; + } + + dateAnt = dateAct; + } + + + /*for (var k=facets2.length; k monthAcumMax) + { + monthAcumMax = countHour; + } + } + + var hours2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; + var posts2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + + var hourAct = 0; + var hourAnt = -1; + + for (var i=0; i<24; i++) + { + for (var j=0; j 0) + { //definimos el elemento svg var svg = d3.select("#histogram") .html("") .append("svg") - .attr("width", w) - .attr("height", h); + .attr("width", w+30) + .attr("height", h+30); //segun los datos de "facets", creamos las barras verticales svg.selectAll("rect") - .data(facets) + .data(facets2) .enter() .append("rect") - .attr("x", function(d, i) {return i*((w/n)+1);}) - //.attr("x", function(d, i) {return i*21;}) + .attr("x", function(d, i) {return (i*((w/n)+1))+5;}) .attr("y", function(d) {return h - (d/s);}) .attr("width", w/n - 1) .attr("height", function(d) {return (d/s);}) @@ -76,20 +204,21 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ //dado que en months tenemos las fechas en formato yyyy-mm, mostramos //un texto encima de cada barra, que dice a que fecha corresponse svg.selectAll("text") - .data(months) + .data(months2) .enter() .append("text") .text(function(d) { return d; }) .attr("x", function(d, i) { - return i * (w / n) + 6; + return (i * ((w / n) + 1))+5; }) .attr("y", function(d) { - return h*0.1; + return h+15; }) + .attr("width", w/n - 1) .attr("fill", "green") - .attr("font-size", "12"); + .attr("font-size", "8"); //definimos un elemento de escala de 0 al mes con el mayor número //de posts @@ -109,8 +238,9 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ .attr("class", "axis") .attr("transform", "translate(" + w - 20 + ",0)") .call(yAxis); - - } + + } + } }); From 04ce969a419e33fd36e09167da31dfc60c8d0ec3 Mon Sep 17 00:00:00 2001 From: LolaUPF Date: Sun, 15 Dec 2013 17:02:23 +0100 Subject: [PATCH 07/14] Fixed bug --- examples/reuters/widgets/TrialPivots.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/reuters/widgets/TrialPivots.js b/examples/reuters/widgets/TrialPivots.js index 4217d61c..b09166c9 100644 --- a/examples/reuters/widgets/TrialPivots.js +++ b/examples/reuters/widgets/TrialPivots.js @@ -1,6 +1,9 @@ (function ($) { AjaxSolr.TrialPivots = AjaxSolr.AbstractFacetWidget.extend({ - afterRequest: function () { - var result=this.getFacetCounts(); + afterRequest: function () { + var result=this.getFacetCounts(); + } +}); + })(jQuery); From 2e569a4064623316f65b140c00292f8f4427b487 Mon Sep 17 00:00:00 2001 From: vvillena Date: Mon, 16 Dec 2013 19:57:50 +0100 Subject: [PATCH 08/14] bar click filtering, widget title changed, type of user_sex field in solar changed from text_general to string --- core/AbstractFacetWidget.js | 11 ++++ examples/reuters/css/reuters.css | 32 ++++++++++- examples/reuters/index.html | 2 +- examples/reuters/js/reuters.js | 3 +- examples/reuters/widgets/HistogramWidget.js | 53 +++++++++++++---- examples/reuters/widgets/TrialPivots.js | 64 +++++++++++++-------- 6 files changed, 125 insertions(+), 40 deletions(-) diff --git a/core/AbstractFacetWidget.js b/core/AbstractFacetWidget.js index b51d5565..f6a8537e 100644 --- a/core/AbstractFacetWidget.js +++ b/core/AbstractFacetWidget.js @@ -132,6 +132,17 @@ AjaxSolr.AbstractFacetWidget = AjaxSolr.AbstractWidget.extend( return this.manager.store.addByValue('fq', this.fq(value)); }); }, + + /** + * Adds a filter query independent of the widget facet field. + * + * @returns {Boolean} Whether a filter query was added. + */ + addByField: function (field, value) { + var a = this.manager.store.removeByValue('fq', new RegExp('^-?' + field + ':')), + b = this.manager.store.addByValue('q', (field+':'+value)); + return a || b; + }, /** * Removes a filter query. diff --git a/examples/reuters/css/reuters.css b/examples/reuters/css/reuters.css index 9a3580eb..474e6d44 100644 --- a/examples/reuters/css/reuters.css +++ b/examples/reuters/css/reuters.css @@ -106,6 +106,7 @@ a:hover { } #calendar { width: 160px; + margin-top: 10px; } #search_help { font-size: 80%; @@ -166,5 +167,34 @@ div.bar { width: 20px; height: 75px; background-color: teal; - margin-right: 2px; + margin-right: 2px; } + +bar2 { + background-color: blue; +} + +.shared, .bar, .label { + font-size: 8pt; + font-weight: bold; + font-family: Arial, sans-serif; +} +.femalebar, .malebar { + fill: #a7b6c1; +} +.highlight rect.malebar, .highlight rect.femalebar { + fill: #a14538; +} +text.malebar, text.femalebar { + display: none; +} +.highlight text { + display: block; + fill: #000; +} + +#histogram +{ +margin-top: 10px; +} + diff --git a/examples/reuters/index.html b/examples/reuters/index.html index b8f3a578..2334ed34 100644 --- a/examples/reuters/index.html +++ b/examples/reuters/index.html @@ -89,7 +89,7 @@

Histogram

-

Trial Pivots

+

Pyramid age-gender

diff --git a/examples/reuters/js/reuters.js b/examples/reuters/js/reuters.js index 88772dcd..2ecfeaa0 100644 --- a/examples/reuters/js/reuters.js +++ b/examples/reuters/js/reuters.js @@ -66,7 +66,6 @@ var Manager; field: 'comment_date' })); -//<<<<<<< HEAD =======>>>>>>> dba6e37c7ce73ae4f0254d24bfd76b61473bd29b Manager.init(); Manager.store.addByValue('q', '*:*'); var params = { @@ -80,7 +79,7 @@ var Manager; 'facet.date.end': '2006-12-31T00:00:00.000Z/DAY+1DAY', 'facet.date.gap': '+1DAY', //************** new line for trial pivot ******************************* - 'facet.pivot':'user_sex,user_age,comment_karma', + 'facet.pivot':'user_sex,user_age', 'json.nl': 'map' }; for (var name in params) { diff --git a/examples/reuters/widgets/HistogramWidget.js b/examples/reuters/widgets/HistogramWidget.js index 31e43dfd..5b0ccb03 100644 --- a/examples/reuters/widgets/HistogramWidget.js +++ b/examples/reuters/widgets/HistogramWidget.js @@ -1,15 +1,9 @@ (function ($) { - - AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ afterRequest: function () { var self = this; - - - //alert("cargando"); - var maxCount = 0; var objectedItems = []; @@ -25,7 +19,6 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ } } - var w = 360; var h = 300; var n; @@ -38,7 +31,6 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ var monthAcum = 0; var monthAcumMax = 0; var facets2 = [0,0,0,0,0,0,0,0,0,0,0,0], months2 = [0,0,0,0,0,0,0,0,0,0,0,0]; - var num2 = 1; if (objectedItems.length > 1) { @@ -72,6 +64,11 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ facets.push(monthAcum); months.push(monthAct); + if (monthAcumMax == 0) + { + monthAcumMax = monthAcum; + } + //fill the gap betweens months facets2[0] = facets[0]; @@ -118,7 +115,7 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ } n = maxMonths; - s = parseInt(monthAcumMax/h); + s = monthAcumMax/h; } else if (objectedItems.length == 1){ @@ -169,6 +166,7 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ if (objectedItems.length > 0) { + //definimos el elemento svg var svg = d3.select("#histogram") .html("") @@ -185,9 +183,37 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ .attr("y", function(d) {return h - (d/s);}) .attr("width", w/n - 1) .attr("height", function(d) {return (d/s);}) - .attr("fill", function(d) { + .attr("class", "femalebar") + .on("click", function (rect, bar) { + + var query; + if (objectedItems.length > 1) + { + if (parseInt(months2[bar].substr(5,2)) < 12) + { + query = '[' + months2[bar] + '-01T00:00:00Z TO ' + months2[bar+1] + '-01T00:00:00Z]'; + } + else + { + query = '[' + months2[bar] + '-01T00:00:00Z TO ' + (parseInt(months2[bar].substr(0,4)) + 1) + '-01-01T00:00:00Z]' + } + if (self.addByField('comment_date', query)) { + self.doRequest(); + } + } + else if (objectedItems.length == 1) + { + if (self.addByField('comment_hour', bar)) { + self.doRequest(); + } + } + + }); + ; + + /*.attr("fill", function(d) { return "rgb(0,0, " + (255) + ")"; - }); + });*/ //dado que en months tenemos las fechas en formato yyyy-mm, mostramos //un texto encima de cada barra, que dice a que fecha corresponse @@ -228,6 +254,11 @@ AjaxSolr.HistogramWidget = AjaxSolr.AbstractFacetWidget.extend({ .call(yAxis); } + else + { + var svg = d3.select("#histogram") + .html(""); + } } }); diff --git a/examples/reuters/widgets/TrialPivots.js b/examples/reuters/widgets/TrialPivots.js index acbad632..cf09ca78 100644 --- a/examples/reuters/widgets/TrialPivots.js +++ b/examples/reuters/widgets/TrialPivots.js @@ -3,10 +3,13 @@ AjaxSolr.TrialPivots = AjaxSolr.AbstractFacetWidget.extend({ afterRequest: function () { + +var self = this; + d3.select("#trial_pivots").html(""); var result=this.getFacetCounts(); - var female = result.f; - var male = result.m; + var female = result.F; + var male = result.M; var femaleAges10 = [0,0,0,0,0,0,0,0,0,0]; var maleAges10 = [0,0,0,0,0,0,0,0,0,0]; @@ -19,6 +22,9 @@ AjaxSolr.TrialPivots = AjaxSolr.AbstractFacetWidget.extend({ var maleAges1 = []; var maleAges11 = []; + if (result.F !== undefined) + { + femaleAges = female[1]; for (var key in femaleAges) @@ -59,7 +65,10 @@ AjaxSolr.TrialPivots = AjaxSolr.AbstractFacetWidget.extend({ } } - +} + +if (result.M !== undefined) + { maleAges = male[1]; for (var key in maleAges) @@ -68,53 +77,53 @@ AjaxSolr.TrialPivots = AjaxSolr.AbstractFacetWidget.extend({ switch (true){ - case ((parseInt(key) >= 0) && (parseInt(key) <= 10)): + case ((parseInt(key) >= 0) && (parseInt(key) <= 9)): maleAges10[0] = maleAges10[0] + maleAges1[0]; break; - case ((parseInt(key) >= 11) && (parseInt(key) <= 20)): + case ((parseInt(key) >= 10) && (parseInt(key) <= 19)): maleAges10[1] = maleAges10[1] + maleAges1[0]; break; - case ((parseInt(key) >= 21) && (parseInt(key) <= 30)): + case ((parseInt(key) >= 20) && (parseInt(key) <= 29)): maleAges10[2] = maleAges10[2] + maleAges1[0]; break; - case ((parseInt(key) >= 31) && (parseInt(key) <= 40)): + case ((parseInt(key) >= 30) && (parseInt(key) <= 39)): maleAges10[3] = maleAges10[3] + maleAges1[0]; break; - case ((parseInt(key) >= 41) && (parseInt(key) <= 50)): + case ((parseInt(key) >= 40) && (parseInt(key) <= 49)): maleAges10[4] = maleAges10[4] + maleAges1[0]; break; - case ((parseInt(key) >= 51) && (parseInt(key) <= 60)): + case ((parseInt(key) >= 50) && (parseInt(key) <= 59)): maleAges10[5] = maleAges10[5] + maleAges1[0]; break; - case ((parseInt(key) >= 61) && (parseInt(key) <= 70)): + case ((parseInt(key) >= 60) && (parseInt(key) <= 69)): maleAges10[6] = maleAges10[6] + maleAges1[0]; break; - case ((parseInt(key) >= 71) && (parseInt(key) <= 80)): + case ((parseInt(key) >= 70) && (parseInt(key) <= 79)): maleAges10[7] = maleAges10[7] + maleAges1[0]; break; - case ((parseInt(key) >= 81) && (parseInt(key) <= 90)): + case ((parseInt(key) >= 80) && (parseInt(key) <= 89)): maleAges10[8] = maleAges10[8] + maleAges1[0]; break; - case (parseInt(key) >= 91): + case (parseInt(key) >= 90): maleAges10[9] = maleAges10[9] + maleAges1[0]; break; } } - +} /* edit/input your data */ var data = [ - {"sharedLabel": "91-100", "barData1": maleAges10[9], "barData2": femaleAges10[9]}, - {"sharedLabel": "81-90", "barData1": maleAges10[8], "barData2": femaleAges10[8]}, - {"sharedLabel": "71-80", "barData1": maleAges10[7], "barData2": femaleAges10[7]}, - {"sharedLabel": "61-70", "barData1": maleAges10[6], "barData2": femaleAges10[6]}, - {"sharedLabel": "51-60", "barData1": maleAges10[5], "barData2": femaleAges10[5]}, - {"sharedLabel": "41-50", "barData1": maleAges10[4], "barData2": femaleAges10[4]}, - {"sharedLabel": "31-40", "barData1": maleAges10[3], "barData2": femaleAges10[3]}, - {"sharedLabel": "21-30", "barData1": maleAges10[2], "barData2": femaleAges10[2]}, - {"sharedLabel": "11-20", "barData1": maleAges10[1], "barData2": femaleAges10[1]}, - {"sharedLabel": "0-10", "barData1": maleAges10[0], "barData2": femaleAges10[0]} + {"sharedLabel": "90-99", "barData1": maleAges10[9], "barData2": femaleAges10[9]}, + {"sharedLabel": "80-89", "barData1": maleAges10[8], "barData2": femaleAges10[8]}, + {"sharedLabel": "70-79", "barData1": maleAges10[7], "barData2": femaleAges10[7]}, + {"sharedLabel": "60-69", "barData1": maleAges10[6], "barData2": femaleAges10[6]}, + {"sharedLabel": "50-59", "barData1": maleAges10[5], "barData2": femaleAges10[5]}, + {"sharedLabel": "40-49", "barData1": maleAges10[4], "barData2": femaleAges10[4]}, + {"sharedLabel": "30-39", "barData1": maleAges10[3], "barData2": femaleAges10[3]}, + {"sharedLabel": "20-29", "barData1": maleAges10[2], "barData2": femaleAges10[2]}, + {"sharedLabel": "10-19", "barData1": maleAges10[1], "barData2": femaleAges10[1]}, + {"sharedLabel": "0-9", "barData1": maleAges10[0], "barData2": femaleAges10[0]} ]; /* edit these settings freely */ @@ -181,7 +190,12 @@ var highlight = function(c) { bar .on("mouseover", highlight("highlight bar")) - .on("mouseout", highlight("bar")); + .on("mouseout", highlight("bar")) + .on("click", function (rect, bar) { + if (self.addByField('user_age','['+ (90-(bar*10)).toString() + ' TO ' + (99-(bar*10)).toString() + ']')) { + self.doRequest(); + } + }); bar.append("rect") .attr("class", "femalebar") From b446d660a89eee437993810728ba8b46cd6ebab7 Mon Sep 17 00:00:00 2001 From: vvillena Date: Mon, 16 Dec 2013 20:26:39 +0100 Subject: [PATCH 09/14] trialPivot filename changed to PyramidAges --- examples/reuters/index.html | 4 +- examples/reuters/js/reuters.js | 8 +-- .../{TrialPivots.js => PyramidAges.js} | 56 +++++++++---------- 3 files changed, 34 insertions(+), 34 deletions(-) rename examples/reuters/widgets/{TrialPivots.js => PyramidAges.js} (82%) diff --git a/examples/reuters/index.html b/examples/reuters/index.html index 2334ed34..4890dd14 100644 --- a/examples/reuters/index.html +++ b/examples/reuters/index.html @@ -24,7 +24,7 @@ - +