Skip to content

Commit c708a74

Browse files
committed
Add search suggestions
1 parent 4d7bde2 commit c708a74

File tree

4 files changed

+49
-23
lines changed

4 files changed

+49
-23
lines changed

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ client.search('keyword', callback);
4545
client.search(callback);
4646
```
4747

48+
#### Fetch search suggestions
49+
```js
50+
// Configure Search suggestions on AddSearch Dashboard first
51+
// Get suggestions starting with a specific prefix
52+
client.suggestions('a', callback);
53+
```
54+
4855
#### Use fuzzy matching
4956
```js
5057
// Enable/disable fuzzy matching used in typo tolerance (default "true")

src/apifetch.js

+33-22
Original file line numberDiff line numberDiff line change
@@ -25,36 +25,47 @@ var executeApiFetch = function(sitekey, type, settings, cb) {
2525
return;
2626
}
2727

28-
// Keyword
29-
let kw = settings.keyword;
28+
// Keyword and query string
29+
var kw = '';
30+
var qs = '';
3031

31-
// Boolean operators (AND, OR, NOT) uppercase
32-
kw = kw.replace(/ and /g, ' AND ').replace(/ or /g, ' OR ').replace(/ not /g, ' NOT ');
32+
// Search
33+
if (type === 'search') {
34+
// Keyword
35+
kw = settings.keyword;
3336

34-
// Escape
35-
kw = encodeURIComponent(kw);
37+
// Boolean operators (AND, OR, NOT) uppercase
38+
kw = kw.replace(/ and /g, ' AND ').replace(/ or /g, ' OR ').replace(/ not /g, ' NOT ');
3639

37-
// Construct query string from settings
38-
var qs = '';
39-
if (type === 'search') {
40-
qs = settingToQueryParam(settings.lang, 'lang') +
41-
settingToQueryParam(settings.fuzzy, 'fuzzy') +
42-
settingToQueryParam(settings.categories, 'categories') +
43-
settingToQueryParam(settings.dateFrom, 'dateFrom') +
44-
settingToQueryParam(settings.dateTo, 'dateTo') +
45-
settingToQueryParam(settings.paging.page, 'page') +
46-
settingToQueryParam(settings.paging.pageSize, 'limit') +
47-
settingToQueryParam(settings.paging.sortBy, 'sort') +
48-
settingToQueryParam(settings.paging.sortOrder, 'order');
40+
// Escape
41+
kw = encodeURIComponent(kw);
4942

50-
// Add custom field filters
51-
if (settings.customFieldFilters) {
52-
for (var i=0; i<settings.customFieldFilters.length; i++) {
53-
qs = qs + '&customField=' + settings.customFieldFilters[i];
43+
// Construct query string from settings
44+
if (type === 'search') {
45+
qs = settingToQueryParam(settings.lang, 'lang') +
46+
settingToQueryParam(settings.fuzzy, 'fuzzy') +
47+
settingToQueryParam(settings.categories, 'categories') +
48+
settingToQueryParam(settings.dateFrom, 'dateFrom') +
49+
settingToQueryParam(settings.dateTo, 'dateTo') +
50+
settingToQueryParam(settings.paging.page, 'page') +
51+
settingToQueryParam(settings.paging.pageSize, 'limit') +
52+
settingToQueryParam(settings.paging.sortBy, 'sort') +
53+
settingToQueryParam(settings.paging.sortOrder, 'order');
54+
55+
// Add custom field filters
56+
if (settings.customFieldFilters) {
57+
for (var i = 0; i < settings.customFieldFilters.length; i++) {
58+
qs = qs + '&customField=' + settings.customFieldFilters[i];
59+
}
5460
}
5561
}
5662
}
5763

64+
// Suggest
65+
else if (type === 'suggest') {
66+
kw = settings.suggestionsPrefix;
67+
}
68+
5869

5970
// Execute API call
6071
fetch('https://api.addsearch.com/v1/' + type + '/' + sitekey + '?term=' + kw + qs)

src/index.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ var client = function(sitekey) {
4646
*
4747
* @param keyword
4848
*/
49-
this.suggest = function(keyword, callback) {
49+
this.suggestions = function(prefix, callback) {
50+
if (!prefix || !callback || !util.isFunction(callback)) {
51+
throw "Illegal suggestions parameters. Should be (prefix, callbackFunction)";
52+
}
53+
this.settings.setSuggestionsPrefix(prefix);
5054
executeApiFetch(this.sitekey, 'suggest', this.settings.getSettings(), callback);
5155
}
5256

src/settings.js

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ var settings = function() {
2121
this.settings.keyword = keyword || '*';
2222
}
2323

24+
this.setSuggestionsPrefix = function(prefix) {
25+
this.settings.suggestionsPrefix = prefix;
26+
}
27+
2428
this.setLanguage = function(language) {
2529
if (language && language.length !== 2) {
2630
throw "use 2-char language code (e.g. \"en\")";

0 commit comments

Comments
 (0)