Skip to content

Commit 0bc13f5

Browse files
authored
Adding ScoreStrategies feature (#34)
- Added model - Added model unit testing - Added compilation of the library
1 parent 97b7cdd commit 0bc13f5

33 files changed

+1533
-307
lines changed

Diff for: dist/apisearch.js

+335-70
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/apisearch.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/apisearch.min.js

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: dist/apisearch.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/Model/Item.d.ts

+8
Original file line numberDiff line numberDiff line change
@@ -239,4 +239,12 @@ export declare class Item {
239239
* @returns string
240240
*/
241241
composeUUID(): string;
242+
/**
243+
* Get path by field.
244+
*
245+
* @param field
246+
*
247+
* @returns {string}
248+
*/
249+
static getPathByField(field: string): string;
242250
}

Diff for: lib/Model/Item.js

+12
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,18 @@ var Item = /** @class */ (function () {
372372
Item.prototype.composeUUID = function () {
373373
return this.uuid.composedUUID();
374374
};
375+
/**
376+
* Get path by field.
377+
*
378+
* @param field
379+
*
380+
* @returns {string}
381+
*/
382+
Item.getPathByField = function (field) {
383+
return (["id", "type"].indexOf(field) > -1)
384+
? "uuid." + field
385+
: "indexed_metadata." + field;
386+
};
375387
return Item;
376388
}());
377389
exports.Item = Item;

Diff for: lib/Query/Filter.d.ts

-8
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,4 @@ export declare class Filter {
9494
* @returns {Filter}
9595
*/
9696
static createFromArray(array: any): Filter;
97-
/**
98-
* Get path by field.
99-
*
100-
* @param field
101-
*
102-
* @returns {string}
103-
*/
104-
static getFilterPathByField(field: string): string;
10597
}

Diff for: lib/Query/Filter.js

-12
Original file line numberDiff line numberDiff line change
@@ -149,18 +149,6 @@ var Filter = /** @class */ (function () {
149149
}
150150
return Filter.create(array.field, array.values, array.application_type, array.filter_type, array.filter_terms);
151151
};
152-
/**
153-
* Get path by field.
154-
*
155-
* @param field
156-
*
157-
* @returns {string}
158-
*/
159-
Filter.getFilterPathByField = function (field) {
160-
return (["id", "type"].indexOf(field) > -1)
161-
? "uuid." + field
162-
: "indexed_metadata." + field;
163-
};
164152
return Filter;
165153
}());
166154
exports.Filter = Filter;

Diff for: lib/Query/Query.d.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { ItemUUID } from "../Model/ItemUUID";
44
import { User } from "../Model/User";
55
import { Aggregation } from "./Aggregation";
66
import { Filter } from "./Filter";
7-
import { ScoreStrategy } from "./ScoreStrategy";
7+
import { ScoreStrategies } from "./ScoreStrategies";
88
import { SortBy } from "./SortBy";
99
/**
1010
* Query constants
@@ -33,7 +33,7 @@ export declare class Query {
3333
private suggestionsEnabled;
3434
private highlightsEnabled;
3535
private filterFields;
36-
private scoreStrategy;
36+
private scoreStrategies;
3737
private fuzziness;
3838
private minScore;
3939
private user;
@@ -467,17 +467,17 @@ export declare class Query {
467467
*/
468468
excludeUUIDs(...uuids: ItemUUID[]): Query;
469469
/**
470-
* Get score strategy
470+
* Get score strategies
471471
*
472-
* @return {ScoreStrategy}
472+
* @return {ScoreStrategies}
473473
*/
474-
getScoreStrategy(): ScoreStrategy;
474+
getScoreStrategies(): ScoreStrategies;
475475
/**
476-
* Set score strategy
476+
* Set score strategies
477477
*
478-
* @param scoreStrategy
478+
* @param scoreStrategies
479479
*/
480-
setScoreStrategy(scoreStrategy: ScoreStrategy): Query;
480+
setScoreStrategies(scoreStrategies: ScoreStrategies): Query;
481481
/**
482482
* Get fuzziness
483483
*

Diff for: lib/Query/Query.js

+32-27
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ exports.__esModule = true;
33
var tslib_1 = require("tslib");
44
var Coordinate_1 = require("../Model/Coordinate");
55
var ItemUUID_1 = require("../Model/ItemUUID");
6+
var Item_1 = require("../Model/Item");
67
var User_1 = require("../Model/User");
78
var Aggregation_1 = require("./Aggregation");
89
var Filter_1 = require("./Filter");
910
var Filter_2 = require("./Filter");
1011
var Aggregation_2 = require("./Aggregation");
1112
var InvalidFormatError_1 = require("../Error/InvalidFormatError");
1213
var Filter_3 = require("./Filter");
13-
var ScoreStrategy_1 = require("./ScoreStrategy");
14+
var ScoreStrategies_1 = require("./ScoreStrategies");
1415
var SortBy_1 = require("./SortBy");
1516
/**
1617
* Query constants
@@ -35,6 +36,10 @@ var Query = /** @class */ (function () {
3536
this.filters = {};
3637
this.itemsPromoted = [];
3738
this.aggregations = {};
39+
this.resultsEnabled = true;
40+
this.aggregationsEnabled = true;
41+
this.suggestionsEnabled = false;
42+
this.highlightsEnabled = false;
3843
this.filterFields = [];
3944
this.minScore = exports.NO_MIN_SCORE;
4045
this.sortByInstance = SortBy_1.SortBy.create();
@@ -144,7 +149,7 @@ var Query = /** @class */ (function () {
144149
*/
145150
Query.prototype.filterUniverseByTypes = function (values) {
146151
var _a;
147-
var fieldPath = Filter_1.Filter.getFilterPathByField("type");
152+
var fieldPath = Item_1.Item.getPathByField("type");
148153
if (values.length > 0) {
149154
this.universeFilters = tslib_1.__assign({}, this.universeFilters, (_a = {}, _a["type"] = Filter_1.Filter.create(fieldPath, values, Filter_2.FILTER_AT_LEAST_ONE, Filter_2.FILTER_TYPE_FIELD), _a));
150155
}
@@ -166,7 +171,7 @@ var Query = /** @class */ (function () {
166171
if (aggregate === void 0) { aggregate = true; }
167172
if (aggregationSort === void 0) { aggregationSort = Aggregation_2.AGGREGATION_SORT_BY_COUNT_DESC; }
168173
var _a, _b;
169-
var fieldPath = Filter_1.Filter.getFilterPathByField("type");
174+
var fieldPath = Item_1.Item.getPathByField("type");
170175
if (values.length > 0) {
171176
this.filters = tslib_1.__assign({}, this.filters, (_a = {}, _a["type"] = Filter_1.Filter.create(fieldPath, values, Filter_2.FILTER_AT_LEAST_ONE, Filter_2.FILTER_TYPE_FIELD), _a));
172177
}
@@ -187,7 +192,7 @@ var Query = /** @class */ (function () {
187192
*/
188193
Query.prototype.filterUniverseByIds = function (values) {
189194
var _a;
190-
var fieldPath = Filter_1.Filter.getFilterPathByField("id");
195+
var fieldPath = Item_1.Item.getPathByField("id");
191196
if (values.length > 0) {
192197
this.universeFilters = tslib_1.__assign({}, this.universeFilters, (_a = {}, _a["id"] = Filter_1.Filter.create(fieldPath, values, Filter_2.FILTER_AT_LEAST_ONE, Filter_2.FILTER_TYPE_FIELD), _a));
193198
}
@@ -205,7 +210,7 @@ var Query = /** @class */ (function () {
205210
*/
206211
Query.prototype.filterByIds = function (values) {
207212
var _a;
208-
var fieldPath = Filter_1.Filter.getFilterPathByField("id");
213+
var fieldPath = Item_1.Item.getPathByField("id");
209214
if (values.length > 0) {
210215
this.filters = tslib_1.__assign({}, this.filters, (_a = {}, _a["id"] = Filter_1.Filter.create(fieldPath, values, Filter_2.FILTER_AT_LEAST_ONE, Filter_2.FILTER_TYPE_FIELD), _a));
211216
}
@@ -226,7 +231,7 @@ var Query = /** @class */ (function () {
226231
Query.prototype.filterUniverseBy = function (field, values, applicationType) {
227232
if (applicationType === void 0) { applicationType = Filter_2.FILTER_AT_LEAST_ONE; }
228233
var _a;
229-
var fieldPath = Filter_1.Filter.getFilterPathByField(field);
234+
var fieldPath = Item_1.Item.getPathByField(field);
230235
if (values.length > 0) {
231236
this.universeFilters = tslib_1.__assign({}, this.universeFilters, (_a = {}, _a[field] = Filter_1.Filter.create(fieldPath, values, applicationType, Filter_2.FILTER_TYPE_FIELD), _a));
232237
}
@@ -252,7 +257,7 @@ var Query = /** @class */ (function () {
252257
if (aggregate === void 0) { aggregate = true; }
253258
if (aggregationSort === void 0) { aggregationSort = Aggregation_2.AGGREGATION_SORT_BY_COUNT_DESC; }
254259
var _a;
255-
var fieldPath = Filter_1.Filter.getFilterPathByField(field);
260+
var fieldPath = Item_1.Item.getPathByField(field);
256261
if (values.length > 0) {
257262
this.filters = tslib_1.__assign({}, this.filters, (_a = {}, _a[filterName] = Filter_1.Filter.create(fieldPath, values, applicationType, Filter_2.FILTER_TYPE_FIELD), _a));
258263
}
@@ -278,7 +283,7 @@ var Query = /** @class */ (function () {
278283
if (applicationType === void 0) { applicationType = Filter_2.FILTER_AT_LEAST_ONE; }
279284
if (rangeType === void 0) { rangeType = Filter_2.FILTER_TYPE_RANGE; }
280285
var _a;
281-
var fieldPath = Filter_1.Filter.getFilterPathByField(field);
286+
var fieldPath = Item_1.Item.getPathByField(field);
282287
if (values.length > 0) {
283288
this.universeFilters = tslib_1.__assign({}, this.universeFilters, (_a = {}, _a[field] = Filter_1.Filter.create(fieldPath, values, applicationType, rangeType), _a));
284289
}
@@ -320,7 +325,7 @@ var Query = /** @class */ (function () {
320325
if (aggregate === void 0) { aggregate = true; }
321326
if (aggregationSort === void 0) { aggregationSort = Aggregation_2.AGGREGATION_SORT_BY_COUNT_DESC; }
322327
var _a;
323-
var fieldPath = Filter_1.Filter.getFilterPathByField(field);
328+
var fieldPath = Item_1.Item.getPathByField(field);
324329
if (values.length !== 0) {
325330
this.filters = tslib_1.__assign({}, this.filters, (_a = {}, _a[filterName] = Filter_1.Filter.create(fieldPath, values, applicationType, rangeType), _a));
326331
}
@@ -414,7 +419,7 @@ var Query = /** @class */ (function () {
414419
if (aggregationSort === void 0) { aggregationSort = Aggregation_2.AGGREGATION_SORT_BY_COUNT_DESC; }
415420
if (limit === void 0) { limit = Aggregation_2.AGGREGATION_NO_LIMIT; }
416421
var _a;
417-
this.aggregations = tslib_1.__assign({}, this.aggregations, (_a = {}, _a[filterName] = Aggregation_1.Aggregation.create(filterName, Filter_1.Filter.getFilterPathByField(field), applicationType, Filter_2.FILTER_TYPE_FIELD, [], aggregationSort, limit), _a));
422+
this.aggregations = tslib_1.__assign({}, this.aggregations, (_a = {}, _a[filterName] = Aggregation_1.Aggregation.create(filterName, Item_1.Item.getPathByField(field), applicationType, Filter_2.FILTER_TYPE_FIELD, [], aggregationSort, limit), _a));
418423
return this;
419424
};
420425
/**
@@ -438,7 +443,7 @@ var Query = /** @class */ (function () {
438443
if (options.length === 0) {
439444
return this;
440445
}
441-
this.aggregations = tslib_1.__assign({}, this.aggregations, (_a = {}, _a[filterName] = Aggregation_1.Aggregation.create(filterName, Filter_1.Filter.getFilterPathByField(field), applicationType, rangeType, options, aggregationSort, limit), _a));
446+
this.aggregations = tslib_1.__assign({}, this.aggregations, (_a = {}, _a[filterName] = Aggregation_1.Aggregation.create(filterName, Item_1.Item.getPathByField(field), applicationType, rangeType, options, aggregationSort, limit), _a));
442447
return this;
443448
};
444449
/**
@@ -537,7 +542,7 @@ var Query = /** @class */ (function () {
537542
* @return {Filter|null}
538543
*/
539544
Query.prototype.getFilterByField = function (fieldName) {
540-
var fieldPath = Filter_1.Filter.getFilterPathByField(fieldName);
545+
var fieldPath = Item_1.Item.getPathByField(fieldName);
541546
for (var i in this.filters) {
542547
if (this.filters[i].getField() == fieldPath) {
543548
return this.filters[i];
@@ -745,20 +750,20 @@ var Query = /** @class */ (function () {
745750
return this;
746751
};
747752
/**
748-
* Get score strategy
753+
* Get score strategies
749754
*
750-
* @return {ScoreStrategy}
755+
* @return {ScoreStrategies}
751756
*/
752-
Query.prototype.getScoreStrategy = function () {
753-
return this.scoreStrategy;
757+
Query.prototype.getScoreStrategies = function () {
758+
return this.scoreStrategies;
754759
};
755760
/**
756-
* Set score strategy
761+
* Set score strategies
757762
*
758-
* @param scoreStrategy
763+
* @param scoreStrategies
759764
*/
760-
Query.prototype.setScoreStrategy = function (scoreStrategy) {
761-
this.scoreStrategy = scoreStrategy;
765+
Query.prototype.setScoreStrategies = function (scoreStrategies) {
766+
this.scoreStrategies = scoreStrategies;
762767
return this;
763768
};
764769
/**
@@ -934,12 +939,12 @@ var Query = /** @class */ (function () {
934939
array.filter_fields = this.filterFields;
935940
}
936941
/**
937-
* Score strategy
942+
* Score strategies
938943
*/
939-
if (this.scoreStrategy instanceof ScoreStrategy_1.ScoreStrategy) {
940-
var scoreStrategyAsArray = this.scoreStrategy.toArray();
941-
if (Object.keys(scoreStrategyAsArray).length > 0) {
942-
array.score_strategy = scoreStrategyAsArray;
944+
if (this.scoreStrategies instanceof ScoreStrategies_1.ScoreStrategies) {
945+
var scoreStrategiesAsArray = this.scoreStrategies.toArray();
946+
if (Object.keys(scoreStrategiesAsArray).length > 0) {
947+
array.score_strategies = scoreStrategiesAsArray;
943948
}
944949
}
945950
if (this.fuzziness !== null) {
@@ -1061,8 +1066,8 @@ var Query = /** @class */ (function () {
10611066
query.filterFields = array.filter_fields instanceof Array
10621067
? array.filter_fields
10631068
: [];
1064-
query.scoreStrategy = array.score_strategy instanceof Object
1065-
? ScoreStrategy_1.ScoreStrategy.createFromArray(array.score_stategy)
1069+
query.scoreStrategies = array.score_strategies instanceof Object
1070+
? ScoreStrategies_1.ScoreStrategies.createFromArray(array.score_strategies)
10661071
: null;
10671072
query.user = array.user instanceof Object
10681073
? User_1.User.createFromArray(array.user)

Diff for: lib/Query/ScoreStrategies.d.ts

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { ScoreStrategy } from "./ScoreStrategy";
2+
/**
3+
* ScoreStrategies constants
4+
*/
5+
export declare const MULTIPLY = "multiply";
6+
export declare const SUM = "sum";
7+
export declare const AVG = "avg";
8+
export declare const MAX = "max";
9+
export declare const MIN = "min";
10+
/**
11+
* ScoreStrategies
12+
*/
13+
export declare class ScoreStrategies {
14+
private scoreStrategies;
15+
private scoreMode;
16+
/**
17+
* Create empty
18+
*
19+
* @param scoreMode
20+
*
21+
* @return {ScoreStrategies}
22+
*/
23+
static createEmpty(scoreMode?: string): ScoreStrategies;
24+
/**
25+
* Add score strategy
26+
*
27+
* @param scoreStrategy
28+
*
29+
* @return {ScoreStrategies}
30+
*/
31+
addScoreStrategy(scoreStrategy: ScoreStrategy): ScoreStrategies;
32+
/**
33+
* Get score strategies
34+
*
35+
* @return {ScoreStrategy[]}
36+
*/
37+
getScoreStrategies(): ScoreStrategy[];
38+
/**
39+
* Get score mode
40+
*
41+
* @return {string}
42+
*/
43+
getScoreMode(): string;
44+
/**
45+
* To array
46+
*
47+
* @return {{
48+
* score_mode: string,
49+
* score_strategies: any
50+
* }}
51+
*/
52+
toArray(): {
53+
score_mode: string;
54+
score_strategies: any;
55+
};
56+
/**
57+
* Create from array
58+
*
59+
* @param array
60+
*
61+
* @return {ScoreStrategies}
62+
*/
63+
static createFromArray(array: any): ScoreStrategies;
64+
}

0 commit comments

Comments
 (0)