Added better examples and created new README
This commit is contained in:
		
							
								
								
									
										78
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | |||||||
|  | Tidx | ||||||
|  | ==== | ||||||
|  |  | ||||||
|  | Tidx is a simple Javascript full text indexing library. Tidx is | ||||||
|  | BSD licensed. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | basic usage | ||||||
|  | ----------- | ||||||
|  |  | ||||||
|  | First, create a new Tidx object: | ||||||
|  |  | ||||||
|  |     var idx = new Tidx(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Next, add your data to the index with the index function: | ||||||
|  |  | ||||||
|  |     idx.index(true, 1, 'Name', 'John D. Smith'); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | The index function accepts four arguments: The first is a boolean | ||||||
|  | which is if the data to be added to the index should be tokenized (that is, | ||||||
|  | broken down into discrete searchable terms), the second is the unique | ||||||
|  | identifier for the data (which will be returned when you search), a field | ||||||
|  | name associated with the data (or null if you don't have a field) and the | ||||||
|  | value you wish to add to the index. In the above example, since we've enabled | ||||||
|  | tokenization, the value would be indexed as three terms "john", "d" and | ||||||
|  | "smith". | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Searching your index is easy: | ||||||
|  |  | ||||||
|  |     var results = idx.search(true, 'john'); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | The search function accepts two arguments: A boolean argument of true | ||||||
|  | if you wish your search terms to be logically conjuct (as if connected | ||||||
|  | by AND) or false if you want your terms to be logically disjunct (as if | ||||||
|  | connected by OR). The second argument is your search terms. The search | ||||||
|  | function supports multiword terms when surrounded by quotes "John Smith", | ||||||
|  | and fields can be specified by name if using a semi-colon (e.g. "name:john") | ||||||
|  | The returned results of the search function is an array of IDs ordered by  | ||||||
|  | frequency of terms from your search. | ||||||
|  |  | ||||||
|  | Fully functional examples of usage can be found in the examples directory. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | advanced usage | ||||||
|  | -------------- | ||||||
|  |  | ||||||
|  | Tidx also supports chaining searches together. This is useful in instances | ||||||
|  | where you may have multiple points of entry for a single search, and the  | ||||||
|  | results should be an aggregate of each. After your index is initialized | ||||||
|  | and data has been added (see above), you can then search it using raw_search: | ||||||
|  |  | ||||||
|  |     var raw_results = {}; | ||||||
|  |     var term_count = idx.raw_search('John', raw_results); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Additional searches may then be added in the same way: | ||||||
|  |  | ||||||
|  |     term_count += idx.raw_search('Smith', raw_results); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Field specific, single term scans may also be included: | ||||||
|  |  | ||||||
|  |     term_count += idx.field_scan('Name', 'David', raw_results); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Finally, the results can be ordered and filtered: | ||||||
|  |  | ||||||
|  |     var results = idx.order(raw_results, term_count); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | If you'd like the results of your search terms to be logically conjunct | ||||||
|  | (as if connected by AND), specific the term count you collected from search. | ||||||
|  | If you'd like them to be logically disjunct (as if connected by OR), specify | ||||||
|  | a term count of zero. | ||||||
							
								
								
									
										6
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								TODO
									
									
									
									
									
								
							| @ -1,9 +1,3 @@ | |||||||
| Coming soon |  | ||||||
| =========== |  | ||||||
| Better README |  | ||||||
| Clearer function comments |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Maybe one day | Maybe one day | ||||||
| ============= | ============= | ||||||
| Larger/More extensive set of test data | Larger/More extensive set of test data | ||||||
|  | |||||||
							
								
								
									
										111
									
								
								example/advanced.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								example/advanced.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,111 @@ | |||||||
|  | <html> | ||||||
|  | 	<head> | ||||||
|  | 		<title>Tidx Test</title> | ||||||
|  | 		<style type="text/css"> | ||||||
|  | 			#result_table td { vertical-align: top; }	 | ||||||
|  | 			td { vertical-align: bottom; } | ||||||
|  | 			th { text-align: left; } | ||||||
|  | 			#output { font-style: italic; } | ||||||
|  | 		</style> | ||||||
|  | 	</head> | ||||||
|  | 	<body> | ||||||
|  | 		<table> | ||||||
|  | 			<tr> | ||||||
|  | 				<td><label for="search">Multiterm search:</label></td> | ||||||
|  | 				<td><input type="text" id="search" name="search" size="50" /></td> | ||||||
|  | 				<td colspan="2"> </td> | ||||||
|  | 			</tr> | ||||||
|  | 			<tr> | ||||||
|  | 				<td><label for="email">Email search:</label></td> | ||||||
|  | 				<td><input type="text" id="email" name="email" size="50" /></td> | ||||||
|  | 				<td><input type="button" id="btn_search" value="Search"/></td> | ||||||
|  | 				<td><div id="output"></div></td> | ||||||
|  | 			</tr> | ||||||
|  | 		</table> | ||||||
|  |  | ||||||
|  | 		<br/> | ||||||
|  |  | ||||||
|  | 		<table id="result_table"> | ||||||
|  | 			<thead> | ||||||
|  | 				<tr> | ||||||
|  | 					<th>ID</th> | ||||||
|  | 					<th>Name</th> | ||||||
|  | 					<th>Email</th> | ||||||
|  | 					<th>City</th> | ||||||
|  | 					<th>State</th> | ||||||
|  | 					<th>Country</th> | ||||||
|  | 					<th>Rank</th> | ||||||
|  | 					<th>Description</th> | ||||||
|  | 				</tr> | ||||||
|  | 			</thead> | ||||||
|  | 			<tbody id="result_tbody"></tbody> | ||||||
|  | 		</table> | ||||||
|  | 		<script type="text/javascript" src="../tidx.js"></script> | ||||||
|  | 		<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> | ||||||
|  | 		<script type="text/javascript"> | ||||||
|  | 			var idx = new Tidx(); | ||||||
|  | 			var json = null; | ||||||
|  |  | ||||||
|  | 			$(function(){ | ||||||
|  | 				var output = $('#output'); | ||||||
|  |  | ||||||
|  | 				// Load test JSON | ||||||
|  | 				output.html('Loading .. '); | ||||||
|  | 				$.getJSON('test.json', function(data){ | ||||||
|  | 					json = data; | ||||||
|  |  | ||||||
|  | 					var s = new Date().getTime(); | ||||||
|  | 					for(var i = 0; i < json.length; i++){ | ||||||
|  | 						for(var f in json[i]){ | ||||||
|  | 							switch(f){ | ||||||
|  | 								case 'id': break; // Don't index the ID | ||||||
|  | 								case 'email': idx.index(false, i, f, json[i][f]); break; | ||||||
|  | 								default: idx.index(true, i, f, json[i][f]); break; | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					output.html('test.json indexed in ' + (new Date().getTime() - s) + "ms\n"); | ||||||
|  | 				}); | ||||||
|  |  | ||||||
|  | 				// Setup the search button | ||||||
|  | 				$('#btn_search').click(function(){ | ||||||
|  | 					var s = new Date().getTime(); | ||||||
|  |  | ||||||
|  | 					var raw_results = {}; | ||||||
|  | 					 | ||||||
|  | 					// Conduct the multiterm search | ||||||
|  | 					var term_count = idx.raw_search($('#search').val(), raw_results); | ||||||
|  |  | ||||||
|  | 					// Add in the field specific scan of 'email' | ||||||
|  | 					term_count += idx.field_scan('email', $('#email').val(), raw_results); | ||||||
|  |  | ||||||
|  | 					// Process the results | ||||||
|  | 					var results = idx.order(raw_results, term_count); | ||||||
|  |  | ||||||
|  | 					var rtbl = $('#result_tbody').empty(); | ||||||
|  | 					for(var i in results){ | ||||||
|  | 						var row = json[results[i]]; | ||||||
|  | 						rtbl.append( | ||||||
|  | 							'<tr>' +  | ||||||
|  | 								'<td>' + row['id'] + '</td>' + | ||||||
|  | 								'<td>' + row['name'] + '</td>' + | ||||||
|  | 								'<td>' + row['email'] + '</td>' + | ||||||
|  | 								'<td>' + row['city'] + '</td>' + | ||||||
|  | 								'<td>' + row['state'] + '</td>' + | ||||||
|  | 								'<td>' + row['country'] + '</td>' + | ||||||
|  | 								'<td>' + row['rank'] + '</td>' + | ||||||
|  | 								'<td>' + row['desc'] + '</td>' + | ||||||
|  | 							'</tr>' | ||||||
|  | 						); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  |  | ||||||
|  | 				// Enter should work to search, too | ||||||
|  | 				$('#search').keydown(function(e){ | ||||||
|  | 					if(e.which == 13){ $('#btn_search').click(); } | ||||||
|  | 				}).focus(); | ||||||
|  | 			}); | ||||||
|  | 		</script> | ||||||
|  | 	</body> | ||||||
|  | </html> | ||||||
							
								
								
									
										96
									
								
								example/basic.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								example/basic.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | |||||||
|  | <html> | ||||||
|  | 	<head> | ||||||
|  | 		<title>Tidx Test</title> | ||||||
|  | 		<style type="text/css"> | ||||||
|  | 			#result_table td { vertical-align: top; }	 | ||||||
|  | 			td { vertical-align: bottom; } | ||||||
|  | 			th { text-align: left; } | ||||||
|  | 			#output { font-style: italic; } | ||||||
|  | 		</style> | ||||||
|  | 	</head> | ||||||
|  | 	<body> | ||||||
|  | 		<table> | ||||||
|  | 			<tr> | ||||||
|  | 				<td><label for="search">Multiterm search:</label></td> | ||||||
|  | 				<td><input type="text" id="search" name="search" size="50" /></td> | ||||||
|  | 				<td><input type="button" id="btn_search" value="Search"/></td> | ||||||
|  | 				<td><div id="output"></div></td> | ||||||
|  | 			</tr> | ||||||
|  | 		</table> | ||||||
|  |  | ||||||
|  | 		<br/> | ||||||
|  |  | ||||||
|  | 		<table id="result_table"> | ||||||
|  | 			<thead> | ||||||
|  | 				<tr> | ||||||
|  | 					<th>ID</th> | ||||||
|  | 					<th>Name</th> | ||||||
|  | 					<th>Email</th> | ||||||
|  | 					<th>City</th> | ||||||
|  | 					<th>State</th> | ||||||
|  | 					<th>Country</th> | ||||||
|  | 					<th>Rank</th> | ||||||
|  | 					<th>Description</th> | ||||||
|  | 				</tr> | ||||||
|  | 			</thead> | ||||||
|  | 			<tbody id="result_tbody"></tbody> | ||||||
|  | 		</table> | ||||||
|  | 		<script type="text/javascript" src="../tidx.js"></script> | ||||||
|  | 		<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> | ||||||
|  | 		<script type="text/javascript"> | ||||||
|  | 			var idx = new Tidx(); | ||||||
|  | 			var json = null; | ||||||
|  |  | ||||||
|  | 			$(function(){ | ||||||
|  | 				var output = $('#output'); | ||||||
|  |  | ||||||
|  | 				// Load test JSON | ||||||
|  | 				output.html('Loading .. '); | ||||||
|  | 				$.getJSON('test.json', function(data){ | ||||||
|  | 					json = data; | ||||||
|  |  | ||||||
|  | 					var s = new Date().getTime(); | ||||||
|  | 					for(var i = 0; i < json.length; i++){ | ||||||
|  | 						for(var f in json[i]){ | ||||||
|  | 							// Index all the fields in json except ID | ||||||
|  | 							if(f != 'id'){ idx.index(true, i, f, json[i][f]); } | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					output.html('test.json indexed in ' + (new Date().getTime() - s) + "ms\n"); | ||||||
|  | 				}); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 				// Setup the search button | ||||||
|  | 				$('#btn_search').click(function(){ | ||||||
|  | 					var s = new Date().getTime(); | ||||||
|  | 					var results = idx.search(true, $('#search').val()); | ||||||
|  | 					output.html('Search completed in ' + (new Date().getTime() - s) + "ms\n"); | ||||||
|  |  | ||||||
|  | 					var rtbl = $('#result_tbody').empty(); | ||||||
|  | 					for(var i in results){ | ||||||
|  | 						var row = json[results[i]]; | ||||||
|  | 							 | ||||||
|  | 						rtbl.append( | ||||||
|  | 							'<tr>' +  | ||||||
|  | 								'<td>' + row['id'] + '</td>' + | ||||||
|  | 								'<td>' + row['name'] + '</td>' + | ||||||
|  | 								'<td>' + row['email'] + '</td>' + | ||||||
|  | 								'<td>' + row['city'] + '</td>' + | ||||||
|  | 								'<td>' + row['state'] + '</td>' + | ||||||
|  | 								'<td>' + row['country'] + '</td>' + | ||||||
|  | 								'<td>' + row['rank'] + '</td>' + | ||||||
|  | 								'<td>' + row['desc'] + '</td>' + | ||||||
|  | 							'</tr>' | ||||||
|  | 						); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  |  | ||||||
|  | 				// Enter should work to search, too | ||||||
|  | 				$('#search').keydown(function(e){ | ||||||
|  | 					if(e.which == 13){ $('#btn_search').click(); } | ||||||
|  | 				}).focus(); | ||||||
|  | 			}); | ||||||
|  | 		</script> | ||||||
|  | 	</body> | ||||||
|  | </html> | ||||||
							
								
								
									
										123
									
								
								test.html
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								test.html
									
									
									
									
									
								
							| @ -1,123 +0,0 @@ | |||||||
| <html> |  | ||||||
| 	<head> |  | ||||||
| 		<title>Tidx Test</title> |  | ||||||
| 		<style type="text/css"> |  | ||||||
| 			td { vertical-align: top; } |  | ||||||
| 			th { text-align: left; } |  | ||||||
| 		</style> |  | ||||||
| 	</head> |  | ||||||
| 	<body> |  | ||||||
| 		<table> |  | ||||||
| 			<tr> |  | ||||||
| 				<td><label for="or_search">Logical OR Search:</label></td> |  | ||||||
| 				<td><input type="text" id="or_search" name="search" size="50" /></td> |  | ||||||
| 				<td><input type="button" id="btn_or_search" value="Search"/></td> |  | ||||||
| 			</tr> |  | ||||||
| 			<tr> |  | ||||||
| 				<td><label for="and_search">Logical AND Search:</label></td> |  | ||||||
| 				<td><input type="text" id="and_search" name="search" size="50" /></td> |  | ||||||
| 				<td><input type="button" id="btn_and_search" value="Search" /></td> |  | ||||||
| 			</tr> |  | ||||||
| 			<tr> |  | ||||||
| 				<td> </td> |  | ||||||
| 				<td colspan="2"> |  | ||||||
| 					<textarea name="output" id="output" rows="10" cols="45"></textarea> |  | ||||||
| 				</td> |  | ||||||
| 			</tr> |  | ||||||
| 		</table> |  | ||||||
|  |  | ||||||
| 		<br/> |  | ||||||
|  |  | ||||||
| 		<table> |  | ||||||
| 			<thead> |  | ||||||
| 				<tr> |  | ||||||
| 					<th>ID</th> |  | ||||||
| 					<th>Name</th> |  | ||||||
| 					<th>Email</th> |  | ||||||
| 					<th>City</th> |  | ||||||
| 					<th>State</th> |  | ||||||
| 					<th>Country</th> |  | ||||||
| 					<th>Rank</th> |  | ||||||
| 					<th>Description</th> |  | ||||||
| 				</tr> |  | ||||||
| 			</thead> |  | ||||||
| 			<tbody id="result_table"></tbody> |  | ||||||
| 		</table> |  | ||||||
| 		<script type="text/javascript" src="tidx.js"></script> |  | ||||||
| 		<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> |  | ||||||
| 		<script type="text/javascript"> |  | ||||||
| 			var t = new Tidx(); |  | ||||||
| 			var json = null; |  | ||||||
|  |  | ||||||
| 			$(function(){ |  | ||||||
| 				var output = $('#output'); |  | ||||||
|  |  | ||||||
| 				// Load test JSON |  | ||||||
| 				output.val('Loading test.json .. '); |  | ||||||
| 				$.getJSON('test.json', function(data){ |  | ||||||
| 					json = data; |  | ||||||
| 					output.val(output.val() + "loaded\nIndexing test.json .. "); |  | ||||||
|  |  | ||||||
| 					var s = new Date().getTime(); |  | ||||||
| 					for(var i = 0; i < json.length; i++){ |  | ||||||
| 						for(var f in json[i]){ |  | ||||||
| 							switch(f){ |  | ||||||
| 								case 'id': break; |  | ||||||
| 								case 'email': t.index(false, i, f, json[i][f]); break; |  | ||||||
| 								default: t.index(true, i, f, json[i][f]); break; |  | ||||||
| 							} |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
|  |  | ||||||
| 					output.val(output.val() + 'indexed in ' + (new Date().getTime() - s) + "ms\n"); |  | ||||||
| 				}); |  | ||||||
|  |  | ||||||
| 				// Setup the search buttons |  | ||||||
| 				$('#btn_or_search').click(function(){ |  | ||||||
| 					dosearch(false, $('#or_search').val()); |  | ||||||
| 				}); |  | ||||||
|  |  | ||||||
| 				$('#btn_and_search').click(function(){ |  | ||||||
| 					dosearch(true, $('#and_search').val()); |  | ||||||
| 				}); |  | ||||||
|  |  | ||||||
| 				// Enter should work to search, too |  | ||||||
| 				$('#or_search').keydown(function(e){ |  | ||||||
| 					if(e.which == 13){ $('#btn_or_search').click(); } |  | ||||||
| 				}); |  | ||||||
|  |  | ||||||
| 				$('#and_search').keydown(function(e){ |  | ||||||
| 					if(e.which == 13){ $('#btn_and_search').click(); } |  | ||||||
| 				}).focus(); |  | ||||||
| 			}); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 			function dosearch(and_search, value){ |  | ||||||
| 				var output = $('#output'); |  | ||||||
| 				output.val(output.val() + 'Searching .. '); |  | ||||||
|  |  | ||||||
| 				var s = new Date().getTime(); |  | ||||||
| 				var results = t.search(and_search, value); |  | ||||||
| 				output.val(output.val() + 'completed in ' + (new Date().getTime() - s) + "ms\n"); |  | ||||||
|  |  | ||||||
| 				var rtbl = $('#result_table').empty(); |  | ||||||
| 				for(var idx in results){ |  | ||||||
| 					var i = results[idx]; |  | ||||||
| 						 |  | ||||||
| 					rtbl.append( |  | ||||||
| 						'<tr>' +  |  | ||||||
| 							'<td>' + json[i]['id'] + '</td>' + |  | ||||||
| 							'<td>' + json[i]['name'] + '</td>' + |  | ||||||
| 							'<td>' + json[i]['email'] + '</td>' + |  | ||||||
| 							'<td>' + json[i]['city'] + '</td>' + |  | ||||||
| 							'<td>' + json[i]['state'] + '</td>' + |  | ||||||
| 							'<td>' + json[i]['country'] + '</td>' + |  | ||||||
| 							'<td>' + json[i]['rank'] + '</td>' + |  | ||||||
| 							'<td>' + json[i]['desc'] + '</td>' + |  | ||||||
| 						'</tr>' |  | ||||||
| 					); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		</script> |  | ||||||
| 	</body> |  | ||||||
| </html> |  | ||||||
		Reference in New Issue
	
	Block a user
	 cdramey
						cdramey