master
Breaking changes
Changed behavior of
Chewy::Index.index_name, it doesn't cache the values anymore.Journal interfaces, related code and rake tasks were completely refactored and are not compatible with the previous version.
Changes
Parallel import and rake tasks.
:shoryukenasync strategy (@josephchoe, #532)Deprecate
Chewy::Index.build_index_name.Rename
Chewy::Index.default_prefixtoChewy::Index.prefix. The old one is deprecated.Add
Chewy::Type.derivable_namefor consistency.Rename
Chewy::Index.derivable_index_nametoChewy::Index.derivable_name.Chewy::Index.derivable_index_nameandChewy::Type.derivable_index_nameare deprecated.Use normal YAML loading, for the config, we don't need the safe one.
default_root_optionsoption (@barthez, #526)Partial indexing ability: it is possible to update only specified fields.
New cool
rake chewy:deploytask.Selective reset (resets only if necessary):
rake chewy:upgrade.Consistency checks and synchronization:
rake chewy:sync.Brand new request DSL. Supports ElasticSearch 2 and 5, better usability, architecture and docs.
Add Kaminari 1.0 support.
skip_index_creation_on_importoption (@sergey-kintsel, #483)Ability to use procs for settings (@parallel588, #481)
Bulk indexing optimizations with new additional options (@eproulx-petalmd, #467)
Configurable sidekiq options (@averell23, #438)
Version 0.9.0
Changes
Add
preferenceparam to Query (@menglewis, #443)Add the
track_scoresoption to the query;_scoreto be computed and tracked even when there are no_scorein sort. (@dmitry, #417)Confugurable
Chewy.indices_path(@robacarp, #414, #433, #439)Journaling implementation (@sergey-kintsel, #409, #425, #428, #432, #434, #463)
Minitest helpers (@robacarp, #396)
Chewy::Query#unlimitedto fetch all the documents (@sergey-kintsel, #393)Chewy::Query#exists?(@sergey-kintsel, #386)Import otimizations (#381, #376)
Additional import optimization technique - raw import (@DNNX, #375)
weightscoring dunction was added to the search DSL (@sevab, #380)Rake tasks support multiple indexes and exceptions:
rake chewy:reset[users,projects],rake chewy:update[-projects]Witchcraft™ supports dynamically generated procs with variables from closure.
Added
Query#preferencefor specifying shard replicas to query against. (@menglewis)
Bugfixes
.script_fieldsmethod in the Index class (@dmitry, #415)Fix routing_missing_exception on delete with parent missing (@guigs, #398)
Sequesl custom primary keys handling fix (@okliv, #385)
Bulk import fixes (@0x0badc0de, #374)
Version 0.8.4
Changes
Brand new import
:bulk_sizeoption, set desired ElasticSearch bulk size in bytesWitchcraft™ technology
Configurable per-type default import options (@barthez, #341)
Various codebase optimizations (@DNNX, @pyromaniac)
update_indexRspec matcher messages improvements:allrake tasks deprecationScoped notification subscriptions in rake tasks (@0x0badc0de, #335)
Async strategies workers accept options (@dnd, #321)
Prefix is configurable per-index (@mikeyhogarth, #314)
Ability to pass proc for transport configuration (@feymartynov, @reidab, #302, #339)
ElasticSearch 2 support (@sergeygaychuk, #297)
Accessing types with methods is deprecated. Use
MyIndex::MyTypeconstant reference instead ofMyIndex.my_typemethod.Sequel adapter improvements (@mrbrdo, #294)
Bugfixes
Mongoid atomic strategy fix (#325)
Method missing fix (@jesjos, #324)
Hash fields composition fix (@eproulx-petalmd, #319)
Better errors handling in strategies (@barthez, #306)
Assets strategies silencer fix for Rails 5 API mode (@clupprich, #303)
Version 0.8.3
Breaking changes:
Chewy.atomicandChewy.urgent_update=methods was removed from the codebase, useChewy.strategyblock instead.delete_from_index?hook is removed from the codebase.
Changes
- Sequel support completely reworked to use common ORM implementations + better sequel specs covarage.
Bugfixes
Sequel objects transactional destruction fix
Correct Rspec mocking framework checking (@mainameiz)
Atomic strategy is now compatible with custom ids proc.
Safe unsubscribe on import (@marshall-lee)
Correct custom assets path silencer (@davekaro)
Version 0.8.2
Changes
ActiveJob strategy by @mkcode
Async strategies tweak (@AndreySavelyev)
GeoPoint readme (@joonty)
Multiple grammar fixes and code improvements (@biow0lf)
Named aggregations by @caldwecr
Sequel adapter by @jirutka
Rake helper methods extracted (@caldwecr, @jirutka)
Multiple grammar fixes (@henrebotha)
Ability to pass a proc to
update_indexto define updating index dynamically (@SeTeM)
Bugfixes
- Fixed transport logger and tracer configuration
Version 0.8.1
Bugfixes
- Added support of elasticsearch-ruby 1.0.10
Version 0.8.0
Breaking changes:
:atomicand:urgentstrategies are usingimport!method raising exceptions
Changes
Crutches™ technology
Added
.script_fieldschainable method to query (@ka8725)update_indexmatcher mocha support (@lardawge):resqueasync strategy:sidekiqasync strategy (inspired by @sharkzp)Added
Query#search_typeforsearch_typerequest option setup (@marshall-lee)
Bugfixes
Rails 4.2 migrations are not raising UndefinedUpdateStrategy anymore on data updates
Mongoid random failing specs fixes (@marshall-lee)
Version 0.7.0
Breaking changes:
Chewy.use_after_commit_callbacks = falsereturns previous RDBMS behavior in testsActiveRecord import is now called after_commit instead of after_save and after_destroy
Import now respects default scope and removes unmatched documents
delete_from_index?method is deprecated, usedefine_type User, delete_if: ->{ removed? } do ... endChewy.request_strategyto configure action controller's request wrapping strategyChewy.root_strategyto configure the first strategy in stackDefault strategy for controller actions is
:atomicDefault strategy for activerecord migrations is
:bypassDefault strategy for sandbox console is
:bypassDefault strategy for rails console is
:urgentChewy.configurationwas renamed toChewy.settingsReworked index update strategies implementation.
Chewy.atomicandChewy.urgent_updateare now deprecated in favour of the newChewy.strategyAPI.Loading objects for object-sourced types using
wrapmethod is deprecated,load_onemethod should be used instead. Or method name might be passed todefine_type:class GeoData def self.get_data(elasticsearch_document) REDIS.get("geo_data_#{elasticsearch_document.id}") end end ... define_type GeoData, load_one_method: :get_data do ... end
Changes
Multiple enhancements by @DNNX
Added
script_fieldsto search criteria (@ka8725)ORM adapters now completely relies on the default scope. This means every scope or objects passed to import are merged with default scope so basically there is no need to define
delete_ifblock. Default scope strongly restricts objects which may land in the current index.define_type Country.where("rating > 30") do end # this code would import only countries with rating between 30 and 50 CountriesIndex::Country.import(Country.where("rating < 50")) # the same is true for arrays of objects or ids CountriesIndex::Country.import(Country.where("rating < 50").to_a) CountriesIndex::Country.import(Country.where("rating < 50").pluck(:id))Object adapter supports custom initial import and load methods, so it could be configured to be used with procs or any class responding to
callmethod.class GeoData def self.call REDIS.get_all end end ... define_type GeoData do ... endNested fields value procs additional arguments: parent objects.
define_type Country do field :name field :cities do field :district, value: ->(city, country) { city.districts if country.main? } end endImplemented basic named scopes
Bugfixes
script_scoreallow options (@joeljunstrom)Chewy indexes eaged loading fixes (@leemhenson)
Chewy::Index.import nilimports nothing instead of initial data
Version 0.6.2
Changes
- document root id custom value option (@baronworks)
Bugfixes
Removed decay function defaults (@Linuus)
Correct config file handling in case of empty file
Version 0.6.1
Changes
min_scorequery option support (@jshirley)Chewy::Query#findmethod for finding documents by id
Version 0.6.0
Changes
Mongoid support YaY! (@fabiotomio, @leemhenson)
urgent: trueoption forupdate_indexis deprecated and will be removed soon, useChewy.atomicinsteadtimeoutandtimed_outsupport (@MarkMurphy)will_paginate support (@josecoelho)
Bugfixes
- All the query chainable methods delegated to indexes and types (partially @Linuus)
Version 0.5.2
Breaking changes:
Chewy::Type::Baseremoved in favour of usingChewy::Typeas a base class for all types
Changes
Chewy.massacrealiased toChewy.delete_allmethod deletes all the indexes with current prefix
Bugfixes:
Advanced type classes resolving (@inbeom)
importignores nil
Version 0.5.1
Changes:
chewy.ymlRails generator (@jirikolarik)Parent-child mappings feature support (@inbeom)
Chewy::Index.total_countandChewy::Type::Base.total_countChewy::Type::Base.resetmethod. Deletes all the type documents and performs import (@jondavidford)Added
Chewy::Query#delete_allscope method using delete by query ES feature (@jondavidford)Rspec 3
update_indexmatcher support (@jimmybaker)Implemented function scoring (@averell23)
Bugfixes:
Indexed eager-loading fix (@leemhenson)
Field type deriving nested type support fix (@rschellhorn)
Version 0.5.0
Breaking changes:
404 exception (IndexMissingException) while query is swallowed and treated like an empty result set.
loadandpreloadfor queries became lazy. Might be partially incompatible.Changed mapping behavior: multi-fields are defined in conformity with ElasticSearch documentation (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_multi_fields.html#_multi_fields)
Changes:
suggestquery options support (@rschellhorn).Added hash data support. How it is possible to pass hashes to import.
rake chewy:resetandrake chewy:updateparamless acts asrake chewy:reset:allandrake chewy:update:allrespectivelyAdded
delete_from_index?API method for custom deleted objects marking.Added
post_filterAPI, working the same way as filters.Added chainable
strategyquery method.Aliasing is performed in index create request for ElasticSearch >= 1.1.
preloadscope method loads ORM/ODM objects in background.loadmethod:onlyand:exceptoptions to specify load types.highlightandrescorequery options support.config/chewy.yml ERB support.
Bugfixes:
Fixed
missingandexistsfilters DSL constructors.Reworked index data composing.
Support for Kaminari new PaginatableArray behavior (@leemhenson)
Correct waiting for status. After index creation, bulk import, and deletion.
Fix #23 "wrong constant name" with namespace models
Version 0.4.0
Changed
update_indexmatcher behavior. Now it compare array attributes position-independently.Search aggregations API support (@arion).
Chewy::Query#facets called without params performs the request and returns facets.
Added
Type.templateDSL method for root objects dynamic templates definition. See mapping.rb for more details.ActiveRecord adapter custom
primary_keysupport (@matthee).Urgent update now clears association cache in ActiveRecord to ensure latest changes are imported.
importnow creates index before performing.Chewy.configuration[:wait_for_status]option. Can be set tored,yelloworgreen. If set - chewy will wait for cluster status before creating, deleting index and import. Useful for specs.
Version 0.3.0
Added
Chewy.configuration[:index]config to setup common indexes options.Chewy.client_optionsreplaced withChewy.configurationUsing source filtering instead of fields filter (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-source-filtering.html).
Version 0.2.3
.import!indexes method, raises import errors..import!types method, raises import errors. Useful for specs.
Version 0.2.2
Support for
nonescope (@undr).Auto-resolved analyzers and analyzers repository (@webgago):
# Setting up analyzers repository: Chewy.analyzer :title_analyzer, type: 'custom', filter: %w(lowercase icu_folding title_nysiis) Chewy.filter :title_nysiis, type: 'phonetic', encoder: 'nysiis', replace: false # Using analyzers from repository in index classes class ProductsIndex < Chewy::Index settings analysis: {analyzer: ['title_analyzer', {one_more_analyzer: {type: 'custom', tokenizer: 'lowercase'}}]} endtitle_analyzerhere will be automatically resolved and passed to index mapping
Version 0.2.0
Reworked import error handling. Now all the import errors from ElasticSearch are handled properly, also import method returns true of false depending on the import process success.
Chewy::Index.importnow takes types hash as argument within options hash:PlacesIndex.import city: City.enabled, country: Country.enabled, refresh: falseOld indexes cleanup after reset.
Added index prefixes.
define_typenow takes options for adapter.chewy:resetandchewy:reset:allrake tasks are now trying to reset index with zero downtime if it is possible.Added
chewy:update:allrake task.Methods
.create,.create!,.delete,.delete,reset!are now supports index name suffix passing as the first argument. See actions.rb for more details.Method
resetrenamed toreset!.Added common loading scope for AR adapter. Also removed scope proc argument, now it executes just in main load scope context.
CitiesIndex.all.load(scope: {city: City.include(:country)})CitiesIndex.all.load(scope: {city: -> { include(:country) }})CitiesIndex.all.load(scope: ->{ include(:country) })
Version 0.1.0
Added filters simplified DSL. See filters.rb for more details.
Queries and filters join system reworked. See query.rb for more details.
Added query
mergemethodupdate_indexmatcher now wraps expected block inChewy.atomicby default. This behaviour can be prevented withatomic: falseoption passingexpect { user.save! }.to update_index('users#user', atomic: false)Renamed
Chewy.observing_enabledtoChewy.urgent_updatewithfalseas defaultupdate_elasticsearchrenamed toupdate_index, addedupdate_index:urgentoptionAdded import ActiveSupport::Notifications instrumentation
ActiveSupport::Notifications.subscribe('import_objects.chewy') { |*args| }Added
types!andonly!query chain methods, which purges previously chained types and fieldstypeschain method now uses types filterAdded
typesquery chain methodChanged types access API:
UsersIndex::User # => UsersIndex::User UsersIndex::types_hash['user'] # => UsersIndex::User UsersIndex.user # => UsersIndex::User UsersIndex.types # => [UsersIndex::User] UsersIndex.type_names # => ['user']update_elasticsearchmethod name as the second argumentupdate_elasticsearch('users#user', :self) update_elasticsearch('users#user', :users)Changed index handle methods, removed
index_prefix. I.e. wasUsersIndex.index_create, becameUsersIndex.createAbility to pass value proc for source object context if arity == 0
field :full_name, value: ->{ first_name + last_name }instead offield :full_name, value: ->(u){ u.first_name + u.last_name }Added
.onlychain toupdate_indexmatcherAdded ability to pass ActiveRecord::Relation as a scope for load
CitiesIndex.all.load(scope: {city: City.include(:country)})Added method
allto index for query DSL consistencyImplemented isolated adapters to simplify adding new ORMs
Query DLS chainable methods delegated to index class (no longer need to call MyIndex.search.query, just MyIndex.query)
Version 0.0.1
Query DSL
Basic index handling
Initial version