3.13 (June 12 2014)

Improvements

ENGINE-934 Changeset feeds support HTTPS and Basic Access Authentication

The engine can now retrieve changesets from a feed or other engine over HTTPS. Additionally, you can specify a username and password in the URL to take advantage of basic auth and thus allow syncing from another engine that sits behind a password enabled proxy.

ENGINE-937 Facets API should allow retrieval of entire tree

When navigable is set to false the facets API only returns data for the given dataIds.

Now, if you don’t supply any dataIds it returns the tree with depth and rootId support.

You can now retrieve facet counts for the entire tree like so:

{
    "facets": {
        "example": {
            "navigable": false,
            "depth": -1
        }
    }
}

ENGINE-941 ENGINE-942 Upgrades dependent libraries

Upgrades dependent libraries.

library previous current
commons-codec 1.8 1.9
commons-collections 3.2.1 4.0
commons-file-upload 1.3 1.3.1
commons-lang 2.6 3.3.2
icu4j 51.2 53.1
jackson-core 2.3.0 2.3.3
jetty 6.1.26 8.1.15.v20140411
lucene/solr 4.6.0 4.7.2
spring-framework 3.2.5 4.0.3
woodstox-core 4.2.0 4.3.0

ENGINE-943 Migrate from java.util.logging to slf4j

The engine now uses slf4j internally for logging instead of java.util.logging.

ENGINE-945 Ability to override the discovery.state and discovery.lock files

Clients that customize the engine startup scripts can either specify the location of or prevent the generation of the discovery.state and discovery.lock files.

To place them in a new location add the following lines to discovery.properties:

state-file = /path/to/discovery.state
lock-file = /path/to/discovery.lock

To prevent their generation:

state-file =
lock-file =

ENGINE-959 Text searches with startsWith or lastWordStartsWith are now faster

Searches against text dimensions that use a searchStyle of startsWith or lastWordStartsWith could take several seconds to complete due to a high number of expanded terms. The number of expanded terms now has a more sensible limit.

Bug Fixes

ENGINE-922 Invalid dimensions file breaks dimensions tab in web interface

Although the engine validates the all XML POSTed to it, the two different XML parsers in use have different degrees of support for validation. The StAX parser incorrectly parses invalid XML which breaks the dimensions tab of the admin interface.

You can no longer POST invalid dimensions:

<!-- This is an example of an invalid dimensions file -->
<dimensions>
    <field id="example" type="text">
 <dimensions/>

ENGINE-927 NullPointerException when faceting over numeric dimension with no declared facets

Fixes a NullPointerException that occured when requesting facets over a numeric dimension that contains no declared facets.

Dimension:

<dimension id='example' type='integer'/>

Query:

{
    "criteria": [
        {"dimension":"example", "value":1}
    ],
    "facets": {
        "example":{}
    }
}

ENGINE-935 ArrayIndexOutOfBoundsException when applying a custom sortBy

Fixes a bug introduced in release 3.12 that causes an ArrayIndexOutOfBoundsException when applying a custom sortBy on a dataset that contains deleted items.

ENGINE-946 Available processors missing from status page

Puts back the number of available processors on the main status page of the web interface.

ENGINE-947 Improve error logging for failed outgoing HTTP connections

Failed outgoing HTTP connections now log the error content in addition to the HTTP status code and message.

ENGINE-951 Changes ignored when only a dimension node with the same id as the containing dimension is different

If you have a dimension that contains a node with the same id as the dimension:

<dimension id="example" type="integer">
    <element id="example" value="[1,100]"/>
</dimension>

And you upload a modified version where the only changes are to the example element or it’s children:

<dimension id="example" type="integer">
    <element id="example" value="[1,200]"/>
</dimension>

The engine would not realize that this dimension was dirty and needed reindexing.You would have to make another change that marked the dimension as dirty or restart the engine to make the change take effect.

This would only occur when the only change to the dimension was a property (or sub node) within a node with the same identifier as the dimension itself. Any other change to the dimension would be correctly detected.

ENGINE-960 Text dimensions with an unsupported locale are better handled

Creation of a text dimension with an unsupported locale and stemming, stop words or phonetic analysis enabled would cause the index to be dropped. The index is now created and the mismatched feature (stemming, stop words, phonetic analyis) is disabled for that dimension.

ENGINE-959 Fixes RuntimeException during highlighting for large text fields

Fixes a bug that occurred when using the highlighter over large text fields that reached the highlight character limit in the middle of a split word.

Compatibility Changes

ENGINE-923 Fix tree scoring for multi-level selections

The scoring algorithm across tree dimensions previously used the difference in depth of the nodes in your selection when calculating the score. It now uses the absolute depth based on the declared tree which stabilizes the score distribution across multiple queries.

Due to this change, the scores over tree dimensions will be slightly different.

ENGINE-936 Fix mutex dimension behavior

Mutex dimensions have always incorrectly created their mutex links. This is apparent when you index more than one node on an item.

They are now simply an alias for tree dimensions where cull defaults to true instead of false.

Dimensions:

<dimension id="tag" type="mutex">
    <element id="a"/>
    <element id="b"/>
    <element id="c"/>
</dimension>

Items JSON:

{"id": "empty"}
{"id": "a", "tag": "a"}
{"id": "b", "tag": "b"}
{"id": "c", "tag": "c"}
{"id": "ab", "tag": ["a", "b"]}
{"id": "ac", "tag": ["a", "c"]}

Items changeset:

<changeset>
    <set-item id="empty"><properties><struct /></properties></set-item>
    <set-item id="a"><properties><struct><entry name="tag"><string>a</string></entry></struct></properties></set-item>
    <set-item id="b"><properties><struct><entry name="tag"><string>b</string></entry></struct></properties></set-item>
    <set-item id="c"><properties><struct><entry name="tag"><string>c</string></entry></struct></properties></set-item>
    <set-item id="ab"><properties><struct><entry name="tag"><array><element><string>a</string></element><element><string>b</string></element></array></entry></struct></properties></set-item>
    <set-item id="ac"><properties><struct><entry name="tag"><array><element><string>a</string></element><element><string>c</string></element></array></entry></struct></properties></set-item>
</changeset>

Query:

{
    "criteria": [
        {"dimension": "tag",  "id": "a"}
    ],
    "pageSize": 10
}

Previous releases of the engine would returns items a and ac. The engine now returns a, ab, and ac.

This happened because of the way internal mutex links were created.

If you use mutex dimensions and only index a single value for each item within that dimension then you are unaffected by this bug.

ENGINE-944 Use log4j instead of java.util.logging

The default slf4j adapter that ships with the engine now uses log4j.

The logging configuration was previously overridden by placing the following line in discovery.properties.

jvm.args = -Djava.util.logging.config.file=/path/to/logging.properties

Now a log4j configuration file should be specified instead:

jvmargs = -Dlog4j.configuration=file:////path/to/log4j.properties

Rotated log files are still stored in log/ by default. However, the current log file is now called log/discovery.log instead of log/discovery-0.log.

ENGINE-956 Improve and rename discovery-spawner to java-runner

The main discovery script has been updated to reflect changes to discovery-spawner which has be renamed to java-runner.

The java-runner script now acts as a generic java wrapper and takes command line arguments.

$ java-runner
Usage: java-runner [options] [--] args

Options:

   -w path   -- change the working directory to {path}
   -b file   -- background the process and store the pid in {file}
   -p file   -- read properties from {file} (supports jvm.cmd, jvm.args, jvm.memory)
   -d        -- enable debug output

Args:

    The arguments to the JVM. For example: -jar myapp.jar 123

Full support for single and double quoted arguments from both the command line and discovery.properties is now in place.

Please note that the script no longer creates log/discovery.out, no longer performs poor-man’s log rotation, and log/derby.out is overwritten on startup.

The main log (log/discovery.log) is still rotated by the default log4j configuration.

ENGINE-961 Main application class now takes arguments

This only affects clients that use their own init scripts to startup the engine.

The main com.t11e.discovery.Application static main entry point now expects arguments. It expects one argument which is the location of the discovery.properties file. This location is relative to the current working directory unless specified as an absolute path.

To start the engine manually and bypass all scripts:

java -jar lib/discovery.jar discovery.properties

Removed features

ENGINE-924 Remove maxSiblingHops option from ordered dimensions

Removes a poorly documented and legacy feature that used to allow hop limits for ordered dimensions.