3.16 (May 8 2015)¶
Improvements¶
ENGINE-986 The isGrouped property now occurs after relevanceValues¶
The order of keys in the query output has changed slightly, now isGrouped
appears after
relevanceValues
. Additionally the groups
and legacyGroupBy
fields are only included
when grouping occurs.
Before:
{
"itemIds": ["example"],
"isGrouped": true,
"groups": {
"itemIds": [["example"]],
"exactMatches": [[true]],
"relevanceValues": [[1.0]]},
"exactMatches": [true],
"relevanceValues": [1.0],
"pageSize": 10,
"currentPageSize": 1,
"startIndex": 0,
"exactSize": 1,
"totalSize": 1,
"datasetSize": 100
}
After:
{
"itemIds": ["example"],
"exactMatches": [true],
"relevanceValues": [1.0],
"isGrouped": true,
"groups": {
"itemIds": [["example"]],
"exactMatches": [[true]],
"relevanceValues": [[1.0]]},
"pageSize": 10,
"currentPageSize": 1,
"startIndex": 0,
"exactSize": 1,
"totalSize": 1,
"datasetSize": 100
}
ENGINE-989 Better handling of top-level weights with exactRelevance, minRelevance and maxRelevance¶
The interaction between a top-level weight
and exactRelevance
, minRelevance
, and
maxRelevance
is now well defined.
exactRelevance
now respects any top-level weight
.
minRelevance
and maxRelevance
options apply against the final score and happen
after any exactRelevance
override.
Example response:
{
"itemIds": ["a", "b"],
"exactMatches": [true, false],
"relevanceValues": [1.0, 0.5]
}
Combining exactRelevance
and weight
:
{
"criteria": ["..."],
"exactRelevance": 0.8,
"weight": 0.1
}
Produces:
{
"itemIds": ["a", "b"],
"exactMatches": [true, false],
"relevanceValues": [0.08, 0.05]
}
Combining minRelevance
and weight
:
{
"criteria": ["..."],
"minRelevance": 0.4,
"weight": 0.5
}
Produces:
{
"itemIds": ["a"],
"exactMatches": [true],
"relevanceValues": [0.5]
}
ENGINE-993 Supports more headers for CORS requests¶
CORS requests now allow Content-Encoding
and X-Requested-With
headers.
This enables easier custom tooling from the browser.
ENGINE-991 Upgrades dependent libraries¶
Upgrades dependent libraries.
library | previous | current |
---|---|---|
slf4j | 1.7.7 | 1.7.12 |
spring-framework | 4.0.6 | 4.1.6 |
woodstox-core-asl | 4.4.0 | 4.4.1 |
jackson-core-asl | 2.4.2 | 2.5.3 |
commons-lang3 | 3.3.2 | 3.4 |
commons-codec | 1.9 | 1.10 |
icu4j | 53.1 | 55.1 |
ENGINE-994 Empty facet requests are now respected¶
An empty facet request is no longer ignored and will instead produce an empty facet response.
The following query:
{
"facets": {}
}
Used to produce:
{
}
Now produces:
{
"facets": {}
}
ENGINE-997 Facets API now ignores includeLabel, maxDepth and rootId for keyword dimensions¶
The includeLabel
, maxDepth
, and rootId
facet options were previously undefined
when faceting over a keyword
dimension. They are now explicitly ignored.
ENGINE-999 Multi-level sort in the facets API¶
Facet sort now includes labelAsc
and labelDesc
options and supports multiple levels of sorting.
The previous behavior had undocumented secondary and tertiary sort options applied, this is no longer the
case and all sorting is explicit.
Single sort option:
{
"facets": {
"example": {"sortBy": "countDesc"}
}
}
Multiple sort options:
{
"facets": {
"example": {"sortBy": ["countDesc", "labelAsc"]}
}
}
ENGINE-990, ENGINE-1008 Better handling of thread interrupts¶
All thread interrupt handling logic has been reviewed and fixed. The engine no longer interrupts itself unless shutting down. This improves compatibility with Java NIO.
ENGINE-1012 Adds isolatedId option to control facet isolation¶
You can now specify an isolatedId
for any top-level criterion to control facet isolation.
It defaults to the value of dimension
from the same criterion. You can disable facet isolation
for a criterion by setting isolatedId
to ""
or null
. This is useful to control
isolation on top-level nested criteria.
Don’t isolated on the first criterion:
{
"criteria": [
{
"dimension": "example",
"value": "a",
"isolatedId": null
},
{
"dimension": "example",
"value": "b"
}
],
"facets": {
"example": {}
}
}
Isolate on the nested criterion:
{
"criteria": [
{
"dimension": "type",
"id": "my-content",
},
{
"isolatedId": "geotag",
"operator": "or",
"criteria": [
{
"dimension": "geoloc",
"longitude": -72,
"latitude": 42
"cullDistance": 10,
"exactMatch": true
},
{
"dimension": "geotag",
"id": "my-place"
}
]
}
],
"facets": {
"type": {},
"geotag": {}
}
}
ENGINE-1013 Introduces query logging¶
The Settings tab of the admin interface has two new options under Logging which enable logging of query requests and responses.
The log entries are stored in a new file log/queries.log
(next to discovery.log
). This log file
has a limit of 10MB with up to 10 rotations.
Logging just query requests:
[2015-05-07 15:20:30,000] Request 0ms {"criteria":[]}
Logging just query responses:
[2015-05-07 15:25:30,000] Response 0ms {"itemIds":[],"exactMatches":[],"relevanceValues":[],"currentPageSize":0,"startIndex":0,"exactSize":0,"totalSize":0,"datasetSize":0}
Logging both query requests and responses:
[2015-05-07 15:30:30,000] RequestResponse 0ms {"criteria":[]} {"itemIds":[],"exactMatches":[],"relevanceValues":[],"currentPageSize":0,"startIndex":0,"exactSize":0,"totalSize":0,"datasetSize":0}
Note that because JSON requires that control characters in strings be escaped, each of these entries is guaranteed to be one one line only.
Compatibility Changes¶
ENGINE-996 Facets API no longer filters out unknown keyword facets¶
When asking for facet counts on a keyword dimension, facets that do not exist will now report a count of 0.
The following query:
{
"facets": {
"example": {
"dataIds": ["exists", "doesNotExist"],
"navigable": false
}
}
}
Used to produce:
{
"facets": {
"example": {
"dataIds": ["exists"],
"data": {
"exists": {"count": 10}
}
}
}
}
Now produces:
{
"facets": {
"example": {
"dataIds": ["exists", "doesNotExist"],
"data": {
"exists": {"count": 10},
"doesNotExist": {"count": 0}
}
}
}
}
ENGINE-999 Different default sort for facets API¶
The default sort order of facets
requests against keyword
dimenions has changed
from declaredAsc
to idAsc
.
Additionally, the previous behavior (for all dimensions) had hidden secondary and tertiary sort options. This is no longer the case and you can completely specify your sort order using an array of options.
See the other summary of ENGINE-999 for more detail.
ENGINE-1001 Drops availableSize from search response¶
The search response no longer contains the availableSize
property. This is a relic from a sharding
feature that was removed a few years ago. If you were reyling on this value, use totalSize
instead.
Before:
{
"itemIds": [],
"exactMatches": [],
"relevanceValues": [],
"currentPageSize": 0,
"startIndex": 0,
"exactSize": 5,
"totalSize": 10,
"availableSize": 10,
"datasetSize": 100
}
After:
{
"itemIds": [],
"exactMatches": [],
"relevanceValues": [],
"currentPageSize": 0,
"startIndex": 0,
"exactSize": 5,
"totalSize": 10,
"datasetSize": 100
}
ENGINE-1005 Removes simple profiler¶
Removes support for a poor man’s profiler. This was never documented and used
in internal toolchains only. Was exposed via the X-Profile
HTTP header.
ENGINE-1010 Removes query function override¶
Removes support for a non-documented function
override of nested queries.
ENGINE-1011 minRelevance and maxRelevance now disable facet isolation¶
Facet isolation did not function correctly when combined with minRelevance
or maxRelevance
top-level overrides. It is now disabled if they are present.
Facet isolation will be disabled with this query, you’ll get uninsolated counts instead:
{
"criteria": [
{
"dimension": "example",
"value": "example"
}
],
"facets": {
"example": {}
},
"minRelevance": 0.5
}
ENGINE-1012 Facet isolation now constrained to top level AND criteria only¶
Facet isolation did not function correctly for nested OR queries. It is now constrained to work only for top-level AND queries.
A new isolatedId
option has been added that can be used in top-level criteria.
See the other summary of ENGINE-1012 for more detail.
Bug Fixes¶
ENGINE-987 Search over a groupBy dimension now respects the cull option¶
If you perform a direct search over a groupBy
dimension it will now respect
the cull
option instead of always culling.
This is an obscure edge case.
<dimensions>
<dimension id="example" type="groupBy"/>
</dimensions>
{
"criteria": [
{
"dimension": "example",
"cull": false
}
]
}
ENGINE-988 Fixes JSON serialization of Infinity, -Infinity and NaN¶
JSON cannot represent Infinity
, -Infinity
or NaN
directly, instead
of generating invalid JSON the engine now converts these values to string form.
Before:
[Infinity, -Infinity, NaN, 1, 2, 3]
After:
["Infinity", "-Infinity", "NaN", 1, 2, 3]
ENGINE-1000 Fixes counts in the Children column on the dimensions tab¶
The counts in the Children column of the dimensions tab in the admin interface did not include all nested children. This has been corrected.
ENGINE-985, ENGINE-909 Query tab breaks with some queries¶
A query that returned itemIds
but not exactMatches
or relevanceValues
no longer breaks
the Query tab of the admin interface.
Example query:
{
"items": ["example"],
"properties": []
}