autocompletion/commit

serve a mix of tokenized prefix and pure prefix results. NOTE: this breaks the offset option

authorJacco van Ossenbruggen
Fri Aug 22 12:05:04 2014 +0200
committerJacco van Ossenbruggen
Fri Aug 22 12:05:04 2014 +0200
commit6210956ec801b268e3173ef552160b36e8fb4cde
treed5fa8ad6ed1c674e0cab2c52d90c66ee81a6f438
parentb445077f71c748ac852c25b4bb42e16c40de9b78
Diff style: patch stat
diff --git a/api/autocomplete_api.pl b/api/autocomplete_api.pl
index 50d0163..3b557c0 100644
--- a/api/autocomplete_api.pl
+++ b/api/autocomplete_api.pl
@@ -21,8 +21,15 @@ http_autocomplete(Request) :-
 			   []),
 			 limit(Limit,
 			       [default(10)]),
+			 /* FIX ME
 			 offset(Offset,
 				[default(0)]),
+			 */
+			 tokenized(Tokenized,
+				   [ float,
+				     default(0.5),
+				     description('Ratio of tokenized versus pure prefix search results')
+				   ]),
 			 method(Method,
 				[one_of([prefix,stem,exact]),
 				 default(prefix),
@@ -42,10 +49,20 @@ http_autocomplete(Request) :-
 	Options = [match(Method),
 		   filter(Filter),
 		   property(LabelRankingList)],
-	instance_search(Query, Hits0, Options),
-	length(Hits0, TotalNumberOfResults),
-	list_offset(Hits0, Offset, Hits1),
-	list_limit(Hits1, Limit, Hits2, _),
+	instance_search(Query, HitsPrefix,    [tokenize(false) | Options]),
+	instance_search(Query, HitsTokenized, [tokenize(true) | Options]),
+	length(HitsPrefix, NrHitsPrefix),
+	length(HitsTokenized, NrHitsTokenized),
+	TotalNumberOfResults is NrHitsPrefix + NrHitsTokenized,
+
+	FirstHalf is min(floor(Limit/(1 -Tokenized)), NrHitsPrefix),
+	SecondHalf is Limit - FirstHalf,
+
+	% list_offset(Hits0, Offset, Hits1),
+
+	list_limit(HitsPrefix, FirstHalf, PrefixHits, _),
+	list_limit(HitsTokenized, SecondHalf,TokenizedHits, _),
+	append([PrefixHits, TokenizedHits], Hits2),
         maplist(ac_expand_hit, Hits2,Hits),
 	reply_json(json{totalNumberOfResults:TotalNumberOfResults,
 			results:Hits}).