From 6a7cf3187b22aa1af8f2541a54178fea4361acaf Mon Sep 17 00:00:00 2001 From: takuyaK Date: Mon, 15 May 2023 19:45:32 +0900 Subject: [PATCH] Add runtime_mappings support --- CHANGELOG.md | 1 + .../search/parameters/runtime_mappings.rb | 14 ++++++++++++++ lib/chewy/search/request.rb | 18 +++++++++++++++++- .../search/parameters/runtime_mappings_spec.rb | 5 +++++ spec/chewy/search/request_spec.rb | 2 +- 5 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 lib/chewy/search/parameters/runtime_mappings.rb create mode 100644 spec/chewy/search/parameters/runtime_mappings_spec.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 61c34bbc6..8ee0b7bd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### New Features +* [#887](https://github.com/toptal/chewy/pull/887): Add support [runtime_mappings](https://www.elastic.co/guide/en/elasticsearch/reference/current/runtime-search-request.html). ([@TakuyaKurimoto](https://github.com/TakuyaKurimoto)) ### Changes ### Bugs Fixed diff --git a/lib/chewy/search/parameters/runtime_mappings.rb b/lib/chewy/search/parameters/runtime_mappings.rb new file mode 100644 index 000000000..b60a09a6f --- /dev/null +++ b/lib/chewy/search/parameters/runtime_mappings.rb @@ -0,0 +1,14 @@ +module Chewy + module Search + class Parameters + # Just a standard hash storage. Nothing to see here. + # + # @see Chewy::Search::Parameters::HashStorage + # @see Chewy::Search::Request#runtime_mappings + # @see https://www.elastic.co/guide/en/elasticsearch/reference/current/runtime-search-request.html + class RuntimeMappings < Storage + include HashStorage + end + end + end +end diff --git a/lib/chewy/search/request.rb b/lib/chewy/search/request.rb index 6c7a62156..0c8d58821 100644 --- a/lib/chewy/search/request.rb +++ b/lib/chewy/search/request.rb @@ -645,7 +645,23 @@ def load(options = nil) # @see https://www.elastic.co/guide/en/elasticsearch/reference/current/highlighting.html # @param value [Hash] # @return [Chewy::Search::Request] - %i[script_fields indices_boost rescore highlight].each do |name| + # + # @!method runtime_mappings(value) + # Add a `runtime_mappings` part to the request. Further + # call values are merged to the storage hash. + # + # @example + # PlacesIndex + # .runtime_mappings(field1: {script: {lang: 'painless', inline: 'some script here'}}) + # .runtime_mappings(field2: {script: {lang: 'painless', inline: 'some script here'}}) + # # => {:runtime_mappings=>{ + # # "field1"=>{type: 'keyword', :script=>{:lang=>"painless", :source=>"emit('some script here')"}}, + # # "field2"=>{type: 'keyword', :script=>{:lang=>"painless", :source=>"emit('some script here')"}}}}}> + # @see Chewy::Search::Parameters::ScriptFields + # @see https://www.elastic.co/guide/en/elasticsearch/reference/current/runtime-search-request.html + # @param value [Hash] + # @return [Chewy::Search::Request] + %i[script_fields indices_boost rescore highlight runtime_mappings].each do |name| define_method name do |value| modify(name) { update!(value) } end diff --git a/spec/chewy/search/parameters/runtime_mappings_spec.rb b/spec/chewy/search/parameters/runtime_mappings_spec.rb new file mode 100644 index 000000000..f33347393 --- /dev/null +++ b/spec/chewy/search/parameters/runtime_mappings_spec.rb @@ -0,0 +1,5 @@ +require 'chewy/search/parameters/hash_storage_examples' + +describe Chewy::Search::Parameters::RuntimeMappings do + it_behaves_like :hash_storage, :runtime_mappings +end diff --git a/spec/chewy/search/request_spec.rb b/spec/chewy/search/request_spec.rb index 4aede10f3..51c673ec3 100644 --- a/spec/chewy/search/request_spec.rb +++ b/spec/chewy/search/request_spec.rb @@ -284,7 +284,7 @@ specify { expect { subject.stored_fields(:foo) }.not_to change { subject.render } } end - %i[script_fields highlight].each do |name| + %i[script_fields highlight runtime_mappings].each do |name| describe "##{name}" do specify { expect(subject.send(name, foo: {bar: 42}).render[:body]).to include(name => {'foo' => {bar: 42}}) } specify do