Adding a ticket, since I'm working on it. I will update the required changes below as I find new ones.
Potential blockers:
* Support for specifying analyzers in elasticsearch.yml has been removed: https://www.elastic.co/guide/en/elasticsearch/reference/5.x/analysis-custom-analyzer.html: we have to use the Rest API to declare analyzers * Analyzer definitions are now index-scoped so you can't declare global analyzers and have to declare the analyzers for each index (more or less each Hibernate root entity); this is highly inconvenient
External work required:
* The elasticsearch-maven-plugin is not compatible with ES 5; I set up a branch with the minimal required changes and opened a PR: https://github.com/alexcojocaru/elasticsearch-maven-plugin/pull/19 * Elastic only released the core Elasticsearch artifact on maven central, and some modules, but not the groovy module (https://github.com/elastic/elasticsearch/tree/master/modules/lang-groovy). The classes are not part of the core artifact, either (they could have been due to some Gradle magic). *Thus*, running our Elasticsearch integration tests with an embedded instance of Elasticsearch may prove impossible (at least for those which need Groovy). Oddly enough, their own language "Painless" suffers from the exact same issue: http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.elasticsearch%20AND%20v%3A5.0.0 **UPDATE**: actually, it's on purpose. They only want to publish ZIPs, so I guess elasticsearch-maven-plugin is a dead-end, at least as it is now: https://github.com/elastic/elasticsearch/issues/18131#issuecomment-222105133 * The Optimize API has been removed in favor of the newer ForceMerge API, which is almost identical (except its name). Jest only supports the Optimize API in its current version. Note that the ForceMerge API wasn't available in ES 2.0, it appeared in ES 2.1... See also https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_rest_api_changes.html#_literal__optimize_literal_endpoint_removed
Changes that would require to drop support for 2.0 (or to introduce dialects):
* The {{string}} datatype disappeared and has been replaced by {{text}} and {{keyword}}. What we need is probably {{text}}, except for non-anlyzed fields that must be {{keyword}} s (as {{text}} fields *have* to be analyzed). * {{null_value}} is no longer supported on the {{text}} datatype: we currently use it for the {{indexNullAs}} feature * sorting on text fields now requires enabling [data loading|https://www.elastic.co/guide/en/elasticsearch/reference/5.0/fielddata.html] in the mapping * DeleteByQuery is a core feature again, with its own API. The plugin has been removed. * The default scripting language is now Painless, which is very similar to Groovy (only script parameters must be prefixed with {{params.}}) * The "fields" keyword when querying is now "stored_fields" and using "_source" in there is disallowed. Source filtering must be used to access the _source. * {{arcDistanceInKm}} has been renamed to {{arcDistance}} and now returns meters: https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_scripting.html#_geopoint_scripts
Changes that will probably also work with ES 2.x (see HSEARCH-2437):
* - "filtered" queries are no longer supported and must be replaced by "bool" queries with a "must" and a "filter" - * - the "queryString" keyword for query string queries does not work anymore, we must use "query_string" (I wonder why we didn't in the first place) - * - The syntax we used with ES 2 for search scripts - ({{"script_fields:" \ {"_distance": \ {"params": \ {... \ }, "script": "..." \ } \ } }}) - seems off with the documentation and doesn't work in ES 5. - * - the {{size}} parameter in bucket aggregation queries (used for facetting) used to accept a 0 value, meaning "Integer.MAX_VALUE". It was a deprecated feature and it's not possible anymore. - See https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-aggregations-bucket-terms-aggregation.html#_size * HSEARCH-2414 affects Elasticsearch 5.0 too (not only 2.4.1).
See my branch where I'm poking around to see what needs to be done: https://github.com/yrodiere/hibernate-search/tree/HSEARCH-2434 |
|