Skip to content

Commit 5f4ce43

Browse files
rahulvudutalaMarkLogic Builder
authored andcommitted
DHFPROD-3720: Show range for facets based on numeric data type
1 parent 4d40a46 commit 5f4ce43

File tree

6 files changed

+164
-3
lines changed

6 files changed

+164
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"functionName": "getNumericFacetsRange",
3+
"params": [
4+
{
5+
"name": "entityName",
6+
"datatype": "string"
7+
},
8+
{
9+
"name": "facetName",
10+
"datatype": "string"
11+
},
12+
{
13+
"name": "indexType",
14+
"datatype": "string"
15+
}
16+
],
17+
"return": {
18+
"datatype": "jsonDocument",
19+
"$javaClass": "com.fasterxml.jackson.databind.JsonNode"
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'use strict';
2+
3+
var entityName;
4+
var facetName;
5+
var indexType;
6+
var query;
7+
8+
let rangeValues = {
9+
"min": null,
10+
"max": null
11+
};
12+
13+
if(indexType === 'elementRangeIndex') {
14+
query = cts.elementReference(facetName);
15+
} else {
16+
query = cts.pathReference("//*:instance" + "/"+ entityName + "/" + facetName);
17+
}
18+
19+
rangeValues.min = cts.min(query);
20+
rangeValues.max = cts.max(query);
21+
22+
rangeValues;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"endpointDirectory": "/data-hub/5/data-services/numericFacetValuesRange/",
3+
"$javaClass": "com.marklogic.hub.dataservices.NumericFacetValuesRange"
4+
}

marklogic-data-hub/src/test/ml-config/databases/final-database.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,46 @@
2626
"collation" : "http://marklogic.com/collation/",
2727
"range-value-positions" : false,
2828
"invalid-values" : "reject"
29+
},
30+
{
31+
"scalar-type": "int",
32+
"namespace-uri": "",
33+
"localname": "numRangeIntProp",
34+
"collation": "",
35+
"range-value-positions": false,
36+
"invalid-values": "reject"
37+
},
38+
{
39+
"scalar-type": "decimal",
40+
"namespace-uri": "",
41+
"localname": "numRangeIntegerProp",
42+
"collation": "",
43+
"range-value-positions": false,
44+
"invalid-values": "reject"
45+
},
46+
{
47+
"scalar-type": "long",
48+
"namespace-uri": "",
49+
"localname": "numRangeLongProp",
50+
"collation": "",
51+
"range-value-positions": false,
52+
"invalid-values": "reject"
53+
},
54+
{
55+
"scalar-type": "float",
56+
"namespace-uri": "",
57+
"localname": "numRangeFloatProp",
58+
"collation": "",
59+
"range-value-positions": false,
60+
"invalid-values": "reject"
61+
},
62+
{
63+
"scalar-type": "double",
64+
"namespace-uri": "",
65+
"localname": "numRangeDoubleProp",
66+
"collation": "",
67+
"range-value-positions": false,
68+
"invalid-values": "reject"
2969
}
3070
],
3171
"range-path-index": [
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
const test = require("/test/test-helper.xqy");
2+
3+
function invokeService(entityName, facetName, indexType) {
4+
return fn.head(xdmp.invoke(
5+
"/data-hub/5/data-services/numericFacetValuesRange/numericFacetValuesRange.sjs",
6+
{
7+
"entityName": entityName,
8+
"facetName": facetName,
9+
"indexType": indexType
10+
}
11+
));
12+
}
13+
14+
function testIntFacetsRange() {
15+
const result = invokeService("SearchFacetsEntity", "numRangeIntProp", "elementRangeIndex");
16+
return [
17+
test.assertEqual(1, result.min),
18+
test.assertEqual(2147483647, result.max)
19+
];
20+
}
21+
22+
function testIntegerFacetsRange() {
23+
const result = invokeService("SearchFacetsEntity", "numRangeIntegerProp", "elementRangeIndex");
24+
return [
25+
test.assertEqual(1.5, result.min),
26+
test.assertEqual(120.5, result.max)
27+
];
28+
}
29+
30+
function testLongFacetsRange() {
31+
const result = invokeService("SearchFacetsEntity", "numRangeLongProp", "elementRangeIndex");
32+
return [
33+
test.assertEqual(1, result.min),
34+
test.assertEqual(650, result.max)
35+
];
36+
}
37+
38+
function testFloatFacetsRange() {
39+
const result = invokeService("SearchFacetsEntity", "numRangeFloatProp", "elementRangeIndex");
40+
return [
41+
test.assertEqual(1.5, result.min),
42+
test.assertEqual(1500.00, result.max)
43+
];
44+
}
45+
46+
function testDoubleFacetsRange() {
47+
const result = invokeService("SearchFacetsEntity", "numRangeDoubleProp", "elementRangeIndex");
48+
return [
49+
test.assertEqual(1.5, result.min),
50+
test.assertEqual(9.22337203685478e18, result.max)
51+
];
52+
}
53+
54+
[]
55+
.concat(testIntFacetsRange())
56+
.concat(testIntegerFacetsRange())
57+
.concat(testLongFacetsRange())
58+
.concat(testFloatFacetsRange())
59+
.concat(testDoubleFacetsRange());

marklogic-data-hub/src/test/ml-modules/root/test/suites/data-hub/5/data-services/searchFacetValues/suiteSetup.sjs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ xdmp.documentInsert("/exp/doc1",
66
"instance": {
77
"SearchFacetsEntity": {
88
"searchStrNameFacet": "firstName1",
9-
"searchStrCityFacet": "Reims"
9+
"searchStrCityFacet": "Reims",
10+
"numRangeIntProp": 1,
11+
"numRangeLongProp": 1,
12+
"numRangeIntegerProp": 1.5,
13+
"numRangeFloatProp": 1.5,
14+
"numRangeDoubleProp": 1.5
1015
}
1116
}
1217
}
@@ -26,7 +31,12 @@ xdmp.documentInsert("/exp/doc2",
2631
"instance": {
2732
"SearchFacetsEntity": {
2833
"searchStrNameFacet": "firstName2",
29-
"searchStrCityFacet": "Raleigh"
34+
"searchStrCityFacet": "Raleigh",
35+
"numRangeIntProp": 10,
36+
"numRangeLongProp": 10,
37+
"numRangeIntegerProp": 10.5,
38+
"numRangeFloatProp": 10.5,
39+
"numRangeDoubleProp": 10.5
3040
}
3141
}
3242
}
@@ -46,7 +56,12 @@ xdmp.documentInsert("/exp/doc3",
4656
"instance": {
4757
"SearchFacetsEntity": {
4858
"searchStrNameFacet": "firstName3",
49-
"searchStrCityFacet": "ranchi"
59+
"searchStrCityFacet": "ranchi",
60+
"numRangeIntProp": 2147483647,
61+
"numRangeLongProp": 650,
62+
"numRangeIntegerProp": 120.5,
63+
"numRangeFloatProp": 1500.00,
64+
"numRangeDoubleProp": 9.22337203685478e18
5065
}
5166
}
5267
}

0 commit comments

Comments
 (0)