NAME
Elastic::Manual::Delta - Important changes in Elastic::Model
VERSION
version 0.52
DESCRIPTION
This documents any important or noteworthy changes in Elastic::Model, with a focus on things that affect backwards compatibility. This does duplicate data from the Changes file, but aims to provide more details and when possible workarounds.
0.52
Elastic::Model is not compatible with Elasticsearch 2.x. Search::Elasticsearch, however, defaults to using a 2.x compatible client: 2_0::Direct. You should specify the client version explicitly when creating a Search::Elasticsearch instance:
use Search::Elasticsearch;
use MyApp;
my $es = Search::Elasticsearch->new(
client => '1_0::Direct', #### explicit client ####
nodes => [ "192.168.1.100:9200", "192.168.1.101:9200"]
);
my $model = MyApp->new( es => $es )
0.51
Requires Search::Elasticsearch v1.20 or above. Tested on Elasticsearch v1.6
0.50
This is the first version which supports the 1.x releases of Elasticsearch, and it provides a migration path from the 0.90.x releases of Elasticsearch.
- Search::Elasticsearch
-
You can no longer use the temporary Search::Elasticsearch::Compat client with Elastic::Model. Instead, use the official Search::Elasticsearch client:
use Search::Elasticsearch; use MyApp; my $es = Search::Elasticsearch->new( client => '1_0::Direct', nodes => [ "192.168.1.100:9200", "192.168.1.101:9200"] ); my $model = MyApp->new( es => $es ) - Migrating from 0.90.x to 1.x
-
You cannot mix nodes from 0.90.x with nodes from 1.x. This leaves you with two options:
Shutdown the 0.90.x cluster and replace it with a 1.x cluster.
Run two clusters in parallel during the transition period.
Either way, the migration path available in Elastic::Model v0.50 will help you through the transition.
You can enable a "compatibility mode" which will allow you to use the same code on 0.90.x and on 1.x by telling the Search::Elasticsearch module to use the
0_90::Client:use Search::Elasticsearch; use MyApp; my $es = Search::Elasticsearch->new( nodes => [ "192.168.1.100:9200", "192.168.1.101:9200"], client => '0_90::Client' ); my $model = MyApp->new( es => $es )If you are planning on running two clusters in parallel, then you can specify a mixture of nodes from the 0.90.x cluster and the 1.x cluster in the
nodeslist. The client will use whatever nodes are available. This allows you to start with just the 0.90.x cluster, bring up the 1.x cluster (it will talk to both clusters), then take down the 0.90.x cluster.Once the migration is finished, remove the `0_90::Client` and the 0.90.x nodes and the compatibility mode will be disabled.
IMPORTANT: If you writing to your index during transition, it is up to you to ensure that writes go to both clusters. A safer approach is to only allow reads during the transition phase.
NOTE: While compatibility mode is enabled,
include_pathsandexclude_paths(see "include_paths / exclude_paths" in Elastic::Model::View) will be ignored. Instead of retrieving just the paths specified, it will retrieve the whole document. ignore_missing-
The
ignore_missingparameter is deprecated and should be replaced by, eg:$namespace->index('foo')->delete(ignore => 404);For now,
ignore_missingwill be translated toignore => 404but will warn about deprecation. omit_normsandomit_term_freq_and_positions-
These two options have been removed from Elasticsearch and replaced by the following mapping:
{ "my_string_field": { "type": "string", "norms": { "enabled": "false" }, "index_options": "docs" }}These options were most useful for
not_analyzedfields, but they are no longer required as they are now the default settings fornot_analyzedfields. If you want to apply these settings to ananalyzedstring field, you can do so as follows:has 'name' => ( is => 'rw', isa => 'Str', type => 'string', mapping => { norms => { enabled => 0 }, index_options => 'docs' } ); - Responses from Elasticsearch
-
Some response formats have changed in Elasticsearch. The structure of the
get-mappingandget-settingsresponses have changed, responses no longer include theokkey, and theexistshas been replaced byfound. Thefieldvalues are now returned as arrays rather than scalars.Compatibility mode makes some effort to normalize responses between 0.90.x and 1.x, but you should test your code on 1.x before migrating.
- Scripting
-
Mvel is no longer enabled by default in Elasticsearch, and in 1.4 it will be removed. However, the new scripting language (Groovy, which is available in 1.3 and will become the default in 1.4) is not available in 0.90.x. To aid migration, you should reenable Mvel scripting during transition. Once complete, update all scripts to use Groovy instead.
See http://www.elasticsearch.org/blog/scripting/ for more.
- Queries
-
Some queries have been removed in 1.x. The
text,text_phrase, andtext_phrase_prefixqueries have been replaced bymatch,match_phrase, andmatch_phrase_prefix.The
custom_score,custom_boost_factor, andcustom_filters_scorequeries have been replaced by thefunction_scorequery.The
numeric_rangefilter no longer exists.Elastic::Model::SearchBuilder supports the
match*queries but still needs to be updated to support thefunction_scorequery. In the meantime, you can use the "raw" syntax. See "RAW-ELASTICSEARCH-QUERY-DSL" in ElasticSearch::SearchBuilder. - Aggregations
-
Aggregations are now supported (see "aggs" in Elastic::Model::View) but only in Elasticsearch 1.0 and above.
- Field attribute deprecations
-
The following attribute deprecations are deprecated and will be removed in a future version:
field
boostindex_nameprecision_steppath
AUTHOR
Clinton Gormley <drtech@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2015 by Clinton Gormley.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.