3.12 (December 18 2013)

Improvements

ENGINE-920 Adds support for groups and notGroups to groupBy criterion

Similar to items and notItems, you can now specify which groups you want included in your groupBy criterion.

Concretely, to search just items in group1 or group2:

{
    "criteria": [
        {"dimension": "text", "value": "search string"}
    ],
    "groupBy": {
        "dimension": "group",
        "groups": ["group1", "group2"]
    },
    "pageSize": 10
}

And to search excluding items in group1 or group2:

{
    "criteria": [
        {"dimension": "text", "value": "search string"}
    ],
    "groupBy": {
        "dimension": "group",
        "notGroups": ["group1", "group2"]
    },
    "pageSize": 10
}

ENGINE-860 Adds weight support to the top-level and nested criterion

You can now specify a weight for top-level and nested criteria. Previously, only dimension or builtin criterion weights were supported. Any other weights were ignored.

Concretely:

<dimension id='test' type='keyword'/>
<set-item id="1">
  <properties><struct>
    <entry name="example"><string>foo</string></entry>
  </struct></properties>
</set-item>

Previously a search for

{"weight":0.5,"criteria":[{"dimension":"example","value":"foo"}],"pageSize":1}

would have returned a relevanceValue of 1, and now returns 0.5.

ENGINE-859 Relaxes scoring to allow scores larger than 1

Previously, all relevanceValues were scaled to fall in the range between 0 and 1 (inclusive). You can now generate relevanceValues larger than 1 with weight, exactRelevance or fuzzyRelevance.

ENGINE-889 ENGINE-891 Optimizes culling for tree and mutex dimensions with null overrides

Adds a performance optimization for queries against tree, ordered, mutex, and geoloc dimensions with cull=true that specify a nullExactMatch or nullRelevance.

ENGINE-887 Improves performance displaying keyword dimensions on the Admin UI indices tab

If there are more than 1000 unique values for a keyword dimension, the indices tab presents the values alphabetically. When there are 1000 or fewer, they are presented by descending count.

ENGINE-895 Makes the Admin UI dimensions tab more compact

The dimensions tab in the admin interface no longer displays a row for every declared element or field. It now displays a child count instead.

ENGINE-894 Makes the Admin UI indices tab more compact

The indices tab in the admin interface now shows a summary of indexed data for each dimension. Each dimension can be expanded to see more detail.

ENGINE-896 Improves partition initialization performance

Improves the performance at engine bootup when initializing the current partition.

ENGINE-897 ENGINE-904 ENGINE-910 ENGINE-911 Upgrades dependent libraries

Upgrades dependent libraries.

library previous current
lucene/solr 4.4.0 4.6.0
spring-framework 3.2.4 3.2.5
icu4j not used 52.1
jackson 2.2.3 2.3.0

ENGINE-905 sortBy for geoloc dimensions now uses the best distance

Previously, sortBy for a geoloc dimension would calculate the distance between the the first criterion value and the first indexed value only. Now it uses the shortest distance between any criterion and indexed value, bringing it inline with how relevanceValue is calculated.

ENGINE-913 Adds timeZone dimension attribute to time dimensions

Time dimensions now support a timeZone attribute which is used to specify a default time zone when the index format does not include a time zone.

Previously, time dimensions would use the system default time zone. They now default to UTC if not otherwise specified.

If you declare a time dimension using a format without an explicit time zone:

<dimension id="example" type="time" format="yyyy-MM-dd HH:mm:ss"/>

It will be treated as if were:

<dimension id="example" type="time" format="yyyy-MM-dd HH:mm:ss" timeZone='UTC'/>

ENGINE-907 ENGINE-914 Unicode 6.3 sorting

Switches sort from java.text.Collator to com.ibm.icu.text.Collator which provides more recent Unicode support, better performance, and is stable across JVM releases.

ENGINE-917 Makes Checkpoint time time zone aware

Checkpointing time zone is now explicitly selected in the admin interface instead of using the system default. This should make it easier to schedule checkpoints for an off-peak time.

Bug Fixes

ENGINE-888 Logging now uses UTF-8 output encoding

The provided logging configuration now specifies UTF-8 output encoding instead of falling back to the system default encoding.

ENGINE-886 Settings are now correctly encoded

You can now include any valid unicode characters in your engine name without them being corrupted.

ENGINE-900 Removes incorrect lastWordStartsWith support from keyword dimensions

Prevents keyword dimensions from partially implementing searchStyle=lastWordStartsWith. They are no longer aware of this setting and instead know about just equals and startsWith. Now any use of lastWordStartsWith on a keyword dimension will use equals.

ENGINE-903 Fixes URL path handling for components containing periods

Fixes GET of /ws/items/{id} to work even when the id contains a period. Previously, you would receive a 404 not-found response.

ENGINE-915 Makes settings page reload on successful ajax post

Removes some dynamic HTML magic from the settings tab of the admin interface. When you change a setting, the page will now reload to ensure that it always displays all derived data correctly.

ENGINE-892 Removes item distribution graphing for groupBy dimensions

The item distribution graph for groupBy dimensions on the indices tab of the admin interface did not display any useful information and has been removed.

ENGINE-918 Updates admin /index to only include facet bucket graphs for scalar dimensions when no facets are pre-declared

The item distribution graphs on the indices tab of the admin interface for integer, double, long and time dimensions that have defined facets now display only the facet distribution. For dimensions with no declared facets, the distribution of all item values is graphed.

Compatibility Changes

ENGINE-890 Makes tree dimensions respect cull=false. Impacts notId, notValue, and mutex relationships.

Queries against tree, ordered, or mutex dimensions that use notId, notValue now respect cull=false. Previously, items that matched a notId, notValue or another mutex element would be dropped when cull=false. Now, when cull=false these items are included with an exactMatch of false and a relevanceValue of 0. If you need the previous behaviour, then add {"cull":true,"nullExactMatch":false} to your search criterion.

ENGINE-898 ENGINE-899 Keyword dimension case sensitivity for search and faceting

Ids for keyword dimension search and faceting are now case-sensitive, like every other id in the system. If you apply ignoreCase and accentFolding attributes to keyword dimensions they affect only values, not ids.

Concretely, with this dimension and item:

<dimension id="example" key="name" type="keyword" ignoreCase="true"/>
<set-item id="1">
  <properties><struct>
    <entry name="example"><string>Fred</string></entry>
  </struct></properties>
</set-item>

These queries will match the item:

{"criteria":[{"dimension":"example","id":"Fred"}]}
{"criteria":[{"dimension":"example","value":"Fred"}]}
{"criteria":[{"dimension":"example","value":"fred"}]}
{"facets":{"example":{"dataIds":["Fred"]}}}

And these queries will not match the item:

{"criteria":[{"dimension":"example","id":"fred"}]}
{"facets":{"example":{"dataIds":["fred"]}}}

ENGINE-902 Implements deduping of indexed values for keyword and 1D indices. Implements sorting of indexed values returned from values and indexValues APIs.

Keyword dimensions now sort and de-duplicate their values at index time. This is only visible when an item has multiple values for a keyword dimension.

The sortBy API still uses the first declared value (“b” in the example below).

Concretely:

<dimension id="example" key="name" type="keyword"/>
<set-item id="1">
  <properties><struct>
    <entry name="example"><array>
      <element><string>b</string></element>
      <element><string>c</string></element>
      <element><string>b</string></element>
      <element><string>a</string></element>
    </array></entry></struct>
  </properties></set-item>
</changeset>

Query:

{"items":["1"],"indexValues":[{"dimension":"example"}]}

Previous response:

{"indexValues":{"example":{"value":[["b","c","b","a"]]}}}

New response:

{"indexValues":{"example":{"value":[["a","b","c"]]}}}

ENGINE-912 Changes default locale from en_US_POSIX to en_US. No longer adds “US” or “POSIX”

The engine used to incorrectly add a country of “US” and a variant of “POSIX” to locale ids. For example, a locale of “fr” was incorrectly turned into “fr_US_POSIX”, and a locale of “en_gb” was incorrectly turned into “en_gb_POSIX”.

The default locale has been changed from en_US_POSIX to en_US.

ENGINE-771 Makes HTTP logging use default timezone

The HTTP logging feature incorrectly used the admin UI timezone when formatting the timestamps. It now uses the system default timezone which is consistent with the rest of the engine’s log output.

Removed features

ENGINE-830 Removes inMemory option from text dimensions

Removes support for the inMemory attribute from text dimensions. It degrades performance and should not be used.

ENGINE-906 Removes developer-only /ws/values webservice

Removes the webservice at /ws/values which returned a poor-man’s repesentation of the indexed values for each document. Use the indexValues API instead.