incubator-blur-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From amccu...@apache.org
Subject [25/50] [abbrv] git commit: Reworked search results to group rows together better
Date Sat, 31 May 2014 14:21:58 GMT
Reworked search results to group rows together better


Project: http://git-wip-us.apache.org/repos/asf/incubator-blur/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-blur/commit/a2538426
Tree: http://git-wip-us.apache.org/repos/asf/incubator-blur/tree/a2538426
Diff: http://git-wip-us.apache.org/repos/asf/incubator-blur/diff/a2538426

Branch: refs/heads/apache-blur-0.2
Commit: a2538426a0a89f6f76ba2a1e375573b9e66cd28e
Parents: de753b6
Author: Chris Rohr <crohr@nearinfinity.com>
Authored: Sun May 25 15:46:04 2014 -0400
Committer: Chris Rohr <crohr@nearinfinity.com>
Committed: Sun May 25 15:46:04 2014 -0400

----------------------------------------------------------------------
 .../apache/blur/console/util/SearchUtil.java    | 77 ++++++++++++++++----
 .../src/main/webapp/js/blurconsole.fake.js      | 30 ++++++--
 .../src/main/webapp/js/blurconsole.model.js     |  9 ++-
 .../src/main/webapp/js/blurconsole.search.js    | 72 +++++++++++++-----
 .../main/webapp/sass/blurconsole.search.scss    |  9 +++
 5 files changed, 153 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/a2538426/contrib/blur-console/src/main/java/org/apache/blur/console/util/SearchUtil.java
----------------------------------------------------------------------
diff --git a/contrib/blur-console/src/main/java/org/apache/blur/console/util/SearchUtil.java
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/SearchUtil.java
index 23eecd3..78804f1 100644
--- a/contrib/blur-console/src/main/java/org/apache/blur/console/util/SearchUtil.java
+++ b/contrib/blur-console/src/main/java/org/apache/blur/console/util/SearchUtil.java
@@ -8,6 +8,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 
 import org.apache.blur.thirdparty.thrift_0_9_0.TException;
 import org.apache.blur.thrift.BlurClient;
@@ -44,6 +45,31 @@ import org.apache.blur.thrift.generated.Selector;
  */
 
 public class SearchUtil {
+	
+	/**
+	 * Record only results:
+	 * 
+	 * {
+	 * 	famName: [
+	 * 		{
+	 * 			colName: value
+	 * 		}
+	 * 	]
+	 * }
+	 * 
+	 * Row results:
+	 * {
+	 * 	famName: {
+	 * 		rowid: [
+	 * 			{
+	 * 				colName: value
+	 * 			}
+	 * 		]
+	 * 	}
+	 * }
+	 */
+	
+	@SuppressWarnings("unchecked")
 	public static Map<String, Object> search(Map<String, String[]> params) throws
IOException, BlurException, TException {
 		Iface client = BlurClient.getClient(Config.getConnectionString());
 		
@@ -54,6 +80,8 @@ public class SearchUtil {
 		String fetch = params.get("fetch")[0];
 		String[] families = params.get("families[]");
 		
+		boolean recordsOnly = "recordrecord".equalsIgnoreCase(rowQuery);
+		
 		BlurQuery blurQuery = new BlurQuery();
 		
 		Query q = new Query(query, "rowrow".equalsIgnoreCase(rowQuery), ScoreType.SUPER, null,
null);
@@ -62,7 +90,7 @@ public class SearchUtil {
 		blurQuery.setFetch(Integer.parseInt(fetch));
 		
 		Selector s = new Selector();
-		s.setRecordOnly("recordrecord".equalsIgnoreCase(rowQuery));
+		s.setRecordOnly(recordsOnly);
 		s.setColumnFamiliesToFetch(new HashSet<String>(Arrays.asList(families)));
 		blurQuery.setSelector(s);
 		
@@ -72,11 +100,11 @@ public class SearchUtil {
 		results.put("total", blurResults.getTotalResults());
 		
 		Set<String> fams = new HashSet<String>();
-		Map<String, List<Map<String, Object>>> rows = new HashMap<String,
List<Map<String, Object>>>();
+		Map<String, Object> rows = new HashMap<String, Object>();
 		for (BlurResult result : blurResults.getResults()) {
 			FetchResult fetchResult = result.getFetchResult();
 			
-			if ("recordrecord".equalsIgnoreCase(rowQuery)) {
+			if (recordsOnly) {
 				// Record Result
 				FetchRecordResult recordResult = fetchResult.getRecordResult();
 				Record record = recordResult.getRecord();
@@ -84,7 +112,8 @@ public class SearchUtil {
 				String family = record.getFamily();
 				fams.add(family);
 				
-				addRowToFam(family, columnsToMap(record.getColumns(), null, record.getRecordId()), rows);
+				List<Map<String, String>> fam = (List<Map<String, String>>) getFam(family,
rows, recordsOnly);
+				fam.add(buildRow(record.getColumns(), record.getRecordId()));
 			} else {
 				// Row Result
 				FetchRowResult rowResult = fetchResult.getRowResult();
@@ -93,7 +122,9 @@ public class SearchUtil {
 					String family = record.getFamily();
 					fams.add(family);
 					
-					addRowToFam(family, columnsToMap(record.getColumns(), row.getId(), record.getRecordId()),
rows);
+					Map<String, List<Map<String, String>>> fam = (Map<String, List<Map<String,
String>>>) getFam(family, rows, recordsOnly);
+					List<Map<String, String>> rowData = getRow(row.getId(), fam);
+					rowData.add(buildRow(record.getColumns(), record.getRecordId()));
 				}
 			}
 		}
@@ -104,26 +135,40 @@ public class SearchUtil {
 		return results;
 	}
 	
-	private static void addRowToFam(String fam, Map<String, Object> row, Map<String,
List<Map<String, Object>>> results) {
-		List<Map<String, Object>> famResults = results.get(fam);
+	private static Map<String, String> buildRow(List<Column> columns, String recordid)
{
+		Map<String, String> map = new TreeMap<String, String>();
+		map.put("recordid", recordid);
+		
+		for (Column column : columns) {
+			map.put(column.getName(), column.getValue());
+		}
+		
+		return map;
+	}
+	
+	private static Object getFam(String fam, Map<String, Object> results, boolean recordOnly)
{
+		Object famResults = results.get(fam);
 		
 		if (famResults == null) {
-			famResults = new ArrayList<Map<String,Object>>();
+			if (recordOnly) {
+				famResults = new ArrayList<Map<String, String>>();				
+			} else {
+				famResults = new TreeMap<String, List<Map<String, String>>>();
+			}
 			results.put(fam, famResults);
 		}
 		
-		famResults.add(row);
+		return famResults;
 	}
 	
-	private static Map<String, Object> columnsToMap(List<Column> columns, String
rowid, String recordid) {
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("rowid", rowid);
-		map.put("recordid", recordid);
+	private static List<Map<String, String>> getRow(String rowid, Map<String,
List<Map<String, String>>> rows) {
+		List<Map<String, String>> row = rows.get(rowid);
 		
-		for (Column column : columns) {
-			map.put(column.getName(), column.getValue());
+		if (row == null) {
+			row = new ArrayList<Map<String, String>>();
+			rows.put(rowid, row);
 		}
 		
-		return map;
+		return row;
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/a2538426/contrib/blur-console/src/main/webapp/js/blurconsole.fake.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/src/main/webapp/js/blurconsole.fake.js b/contrib/blur-console/src/main/webapp/js/blurconsole.fake.js
index 1a817e2..ef5d064 100644
--- a/contrib/blur-console/src/main/webapp/js/blurconsole.fake.js
+++ b/contrib/blur-console/src/main/webapp/js/blurconsole.fake.js
@@ -179,13 +179,31 @@ blurconsole.fake = (function() {
 			if (total - args.start < toFetch) {
 				toFetch = total - args.start;
 			}
-			results[fam] = [];
-			for (var r = 0; r < randomNumber(toFetch); r++) {
-				var row = {};
-				for (var c=0; c < cols; c++) {
-					row['col'+c] = randomString();
+
+			if (args.rowRecordOption === 'recordrecord') {
+				results[fam] = [];
+				for (var recordIndex = 0; recordIndex < randomNumber(toFetch); recordIndex++) {
+					var recordRow = {};
+					recordRow.recordid = randomNumber(1000000).toString();
+					for (var recordColIndex=0; recordColIndex < cols; recordColIndex++) {
+						recordRow['col'+recordColIndex] = randomString();
+					}
+					results[fam].push(recordRow);
+				}
+			} else {
+				results[fam] = {};
+				for (var rowIndex = 0; rowIndex < randomNumber(toFetch); rowIndex++) {
+					var rowid = randomNumber(10000000).toString();
+					results[fam][rowid] = [];
+					for (var rowRecordIndex = 0; rowRecordIndex < randomNumber(10); rowRecordIndex++)
{
+						var row = {};
+						row.recordid = randomNumber(1000000).toString();
+						for (var rowRecordColIndex=0; rowRecordColIndex < cols; rowRecordColIndex++) {
+							row['col'+rowRecordColIndex] = randomString();
+						}
+						results[fam][rowid].push(row);
+					}
 				}
-				results[fam].push(row);
 			}
 		});
 

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/a2538426/contrib/blur-console/src/main/webapp/js/blurconsole.model.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/src/main/webapp/js/blurconsole.model.js b/contrib/blur-console/src/main/webapp/js/blurconsole.model.js
index 9e8fc41..c85d006 100644
--- a/contrib/blur-console/src/main/webapp/js/blurconsole.model.js
+++ b/contrib/blur-console/src/main/webapp/js/blurconsole.model.js
@@ -410,8 +410,13 @@ blurconsole.model = (function() {
 
 			if (typeof dataResults !== 'undefined' && dataResults !== null) {
 				$.each(dataResults, function(family, resultList){
-					var tmpList = results[family] || [];
-					results[family] = tmpList.concat(resultList);
+					if (currentArgs.rowRecordOption === 'recordrecord') {
+						var recordList = results[family] || [];
+						results[family] = recordList.concat(resultList);
+					} else {
+						var rowList = results[family] || {};
+						results[family] = $.extend(resultList, rowList);
+					}
 				});
 			}
 			$.gevent.publish('results-updated', [dataFamilies]);

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/a2538426/contrib/blur-console/src/main/webapp/js/blurconsole.search.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/src/main/webapp/js/blurconsole.search.js b/contrib/blur-console/src/main/webapp/js/blurconsole.search.js
index 3cfd20b..9654262 100644
--- a/contrib/blur-console/src/main/webapp/js/blurconsole.search.js
+++ b/contrib/blur-console/src/main/webapp/js/blurconsole.search.js
@@ -47,7 +47,7 @@ blurconsole.search = (function () {
 	jqueryMap = {},
 	setJqueryMap, initModule, unloadModule, drawResultHolders, drawResults, registerPageEvents,
unregisterPageEvents,
 	sendSearch, showOptions, reviewTables, loadTableList, getMoreData, fixPanelWidths, updateOptionPopover,
updateOptionDisplay,
-	persistOptions;
+	persistOptions, getColList;
 
 	setJqueryMap = function() {
 		var $container = stateMap.$container;
@@ -211,31 +211,53 @@ blurconsole.search = (function () {
 		$.each(families, function(i, fam) {
 			var famResults = results[fam],
 				famId = '#' + blurconsole.browserUtils.cleanId(fam),
-				famHolder = $(famId + ' .panel-body'), table = '', cols;
+				famHolder = $(famId + ' .panel-body'),
+				table = '<table class="table table-condensed table-hover table-bordered"><thead><tr>',
+				cols, famTotal;
 
-			cols = blurconsole.utils.reject(blurconsole.utils.keys(famResults[0]), function(i) {
-				return i === 'rowid' || i === 'recordid';
-			});
-			cols.sort();
+			if ($.isArray(famResults)) {
+				// Record results
+				cols = getColList(famResults[0]);
 
-			cols = ['rowid', 'recordid'].concat(cols);
+				$.each(cols, function(i, col) {
+					table += '<th>' + col + '</th>';
+				});
+				table += '</tr></thead><tbody>';
+				$.each(famResults, function(i, row) {
+					table += '<tr>';
+					$.each(cols, function(c, col) {
+						table += '<td>' + (row[col] || '') + '</td>';
+					});
+					table += '</tr>';
+				});
+				famTotal = famResults.length;
+			} else {
+				// Row results
+				var rowids = blurconsole.utils.keys(famResults);
+				var firstRow = famResults[rowids[0]];
+				cols = getColList(firstRow[0]);
 
-			table += '<table class="table table-condensed table-hover table-bordered"><thead><tr>';
-			$.each(cols, function(i, col) {
-				table += '<th>' + col + '</th>';
-			});
-			table += '</tr></thead><tbody>';
-			$.each(famResults, function(i, row) {
-				table += '<tr>';
-				$.each(cols, function(c, col) {
-					table += '<td>' + (row[col] || '') + '</td>';
+				$.each(cols, function(i, col) {
+					table += '<th>' + col + '</th>';
 				});
-				table += '</tr>';
-			});
+				table += '</tr></thead><tbody>';
+				$.each(famResults, function(rowid, records) {
+					table += '<tr class="row-separator"><td colspan="' + cols.length + '"><strong>rowid:</strong>
' + rowid + ' (<em>' + records.length + ' records</em>)</td></tr>';
+					$.each(records, function(i, rec) {
+						table += '<tr>';
+						$.each(cols, function(c, col) {
+							table += '<td>' + (rec[col] || '') + '</td>';
+						});
+						table += '</tr>';
+					});
+				});
+				famTotal = rowids.length;
+			}
+
 			table += '</tbody></table>';
 
-			if (famResults.length < blurconsole.model.search.getTotal()) {
-				table += '<div class="pull-right"><a href="' + famId + '" class="btn btn-primary
nextPage">Load More...</a></div>';
+			if (famTotal < blurconsole.model.search.getTotal()) {
+				table += '<div class="pull-left"><a href="' + famId + '" class="btn btn-primary
nextPage">Load More...</a></div>';
 			}
 
 			famHolder.html(table);
@@ -246,6 +268,16 @@ blurconsole.search = (function () {
 		fixPanelWidths();
 	};
 
+	getColList = function(row) {
+		var cols = blurconsole.utils.reject(blurconsole.utils.keys(row), function(i) {
+			return i === 'recordid';
+		});
+		cols.sort();
+
+		cols = ['recordid'].concat(cols);
+		return cols;
+	};
+
 	loadTableList = function() {
 		var tableMap = blurconsole.model.tables.getAllEnabledTables();
 

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/a2538426/contrib/blur-console/src/main/webapp/sass/blurconsole.search.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console/src/main/webapp/sass/blurconsole.search.scss b/contrib/blur-console/src/main/webapp/sass/blurconsole.search.scss
index 2cffc29..da53b29 100644
--- a/contrib/blur-console/src/main/webapp/sass/blurconsole.search.scss
+++ b/contrib/blur-console/src/main/webapp/sass/blurconsole.search.scss
@@ -28,4 +28,13 @@ under the License.
 #resultCount {
 	padding-left: 30px;
 	font-style: italic;
+}
+
+tr.row-separator {
+	td {
+		background-color: #999;
+	}
+	&:hover td {
+		background-color: #999 !important;
+	}
 }
\ No newline at end of file


Mime
View raw message