es_query_builder 1.0.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd7b765e4166da57cfc9715f0d4e5ab03c3108d4
4
- data.tar.gz: 79c474f1f90498d471ab3f64a6b5cfe7504a894e
3
+ metadata.gz: 476bcc5f9cc581265e2a05f04d04762f43d022b3
4
+ data.tar.gz: 10434493e8ff90f36a1ac52cfdba78686d15d9d8
5
5
  SHA512:
6
- metadata.gz: 0b14528af93dc4e9206f25b227cb72ba1bd6ebe97bb3526d302d68f81aa77cfef90f9301e97dc5cecc0bc51188fbcc219f9c8db9090dc6bd951795aafacfde44
7
- data.tar.gz: 8845e9f956cdb0fed6ccc36ab9dae3906d2cb75faf2818f61ff8070014069ecac4abb13e5804f5692b75c4980ee3b6af662272472338ad1b984f3b951c090c55
6
+ metadata.gz: 3a826034f827ffa7444d9155ddab30ebac685bd3e0bcf756a49a189b90cc6a7c7896211d5025b4cf8a9c5f8d4e90d25b5f8c5daf3b431009c952ee39f2c78ba5
7
+ data.tar.gz: 5412d2c7016367ec5af2f74e4de4e70a9846eb46e4b06138e5b326e925602c3b1f237fd5d28d17e9c466d3b31c3c09fc3cf1186733d1ca0ef298be12cd36dc93
@@ -0,0 +1,59 @@
1
+ class AggregationBuilders
2
+
3
+ def self.terms(*args)
4
+ return ::Aggregations::Buckets::TermsAggregationBuilder.new(*args)
5
+ end
6
+
7
+ def self.filter(*args)
8
+ return ::Aggregations::Buckets::FilterAggregationBuilder.new(*args)
9
+ end
10
+
11
+ def self.filters(*args)
12
+ return ::Aggregations::Buckets::FiltersAggregationBuilder.new(*args)
13
+ end
14
+
15
+ def self.geohash_grid(*args)
16
+ return ::Aggregations::Buckets::GeoGridAggregationBuilder.new(*args)
17
+ end
18
+
19
+ def self.top_hits(*args)
20
+ return ::Aggregations::Buckets::TopHitsAggregationBuilder.new(*args)
21
+ end
22
+
23
+ def self.nested(*args)
24
+ return ::Aggregations::Buckets::NestedAggregationBuilder.new(*args)
25
+ end
26
+
27
+ def self.reverse_nested(*args)
28
+ return ::Aggregations::Buckets::ReverseNestedAggregationBuilder.new(*args)
29
+ end
30
+
31
+ def self.date_histogram(*args)
32
+ return ::Aggregations::Buckets::DateHistogramAggregationBuilder.new(*args)
33
+ end
34
+
35
+ def self.histogram(*args)
36
+ return ::Aggregations::Buckets::HistogramAggregationBuilder.new(*args)
37
+ end
38
+
39
+ def self.date_range(*args)
40
+ return ::Aggregations::Buckets::DateRangeAggregationBuilder.new(*args)
41
+ end
42
+
43
+ def self.range(*args)
44
+ return ::Aggregations::Buckets::RangeAggregationBuilder.new(*args)
45
+ end
46
+
47
+ def self.max(*args)
48
+ return ::Aggregations::Metrics::MaxAggregationBuilder.new(*args)
49
+ end
50
+
51
+ def self.min(*args)
52
+ return ::Aggregations::Metrics::MinAggregationBuilder.new(*args)
53
+ end
54
+
55
+ def self.avg(*args)
56
+ return ::Aggregations::Metrics::AvgAggregationBuilder.new(*args)
57
+ end
58
+
59
+ end
@@ -0,0 +1,39 @@
1
+ module AttributesReader
2
+
3
+ class Attributes
4
+
5
+ def initialize parent_object
6
+ @parent_object = parent_object
7
+ end
8
+
9
+ def method_missing(m, *args, &block)
10
+ if @parent_object.methods.include?("#{m}_expr".intern)
11
+ @parent_object.send("#{m}_expr", *args)
12
+ else
13
+ raise MissingAttributeError.new(m, @parent_object.class)
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ class MissingAttributeError < StandardError
20
+
21
+ def initialize attr_name, class_name
22
+ @attr = attr_name
23
+ @class = class_name
24
+ super(message)
25
+ end
26
+
27
+ def message
28
+ return "Missing Attribute #{@attr} for #{@class}"
29
+ end
30
+
31
+ end
32
+
33
+
34
+ def attributes
35
+ @attributes ||= Attributes.new(self)
36
+ return @attributes
37
+ end
38
+
39
+ end
@@ -1,8 +1,30 @@
1
- require 'elastic_search_query'
2
- require 'token_query_builder'
3
- require 'fetch_es_data'
4
- require 'indexer'
5
- require 'constants'
1
+ # require 'elastic_search_query'
2
+ # require 'token_query_builder'
3
+ # require 'fetch_es_data'
4
+ # require 'indexer'
5
+ # require 'constants'
6
+ require 'active_support/all'
7
+ require 'elasticsearch'
8
+ require_relative 'attributes_reader'
9
+ Dir[File.join(__dir__, 'enums', '*.rb')].each { |file| require file }
10
+ Dir[File.join(__dir__, 'common', '*.rb')].each { |file| require file }
11
+ Dir[File.join(__dir__, 'function_scores', '*.rb')].each { |file| require file }
12
+ Dir[File.join(__dir__, 'misc', '*.rb')].each { |file| require file }
13
+ Dir[File.join(__dir__, 'queries', '*.rb')].each { |file| require file }
14
+ Dir[File.join(__dir__, 'scripts', '*.rb')].each { |file| require file }
15
+ Dir[File.join(__dir__, 'sort', '*.rb')].each { |file| require file }
16
+ Dir[File.join(__dir__, 'misc', '*.rb')].each { |file| require file }
17
+ Dir[File.join(__dir__, 'aggregations', 'helpers', '*.rb')].each { |file| require file }
18
+ Dir[File.join(__dir__, 'aggregations', 'buckets', '*.rb')].each { |file| require file }
19
+ Dir[File.join(__dir__, 'aggregations', 'metrics', '*.rb')].each { |file| require file }
20
+ require_relative 'query_builders'
21
+ require_relative 'function_score_builders'
22
+ Dir[File.join(__dir__, 'aggregation_builders.rb')].each { |file| require file }
23
+ require_relative 'sort_builders'
24
+ require_relative 'search_source_builder'
25
+ require_relative 'search_request'
26
+ require_relative 'multi_search_request'
27
+ require_relative 'rest_client'
6
28
 
7
29
  module EsQueryBuilder
8
30
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Factory class for function scores.
4
+ class FunctionScoreBuilders
5
+ # @return [FunctionScores::RandomScoreFunctionBuilder]
6
+ # random_score_function_builder object
7
+ def self.random_score_function
8
+ FunctionScores::RandomScoreFunctionBuilder.new
9
+ end
10
+
11
+ # @params [Scripts::Script] script object for the function
12
+ # @return [FunctionScores::ScriptScoreFunctionBuilder]
13
+ # script_score_function_builder object with the
14
+ # provided script
15
+ def self.script_score_function(*args)
16
+ FunctionScores::ScriptScoreFunctionBuilder.new(*args)
17
+ end
18
+
19
+ # @return [FunctionScores::WeightedScoreFunctionBuilder]
20
+ # weighted_score_function_builder object
21
+ def self.weighted_score_function
22
+ FunctionScores::WeightedScoreFunctionBuilder.new
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ class MultiSearchRequest
2
+ include AttributesReader
3
+
4
+ def initialize
5
+ @requests = []
6
+ end
7
+
8
+ def body
9
+ return @requests.map{|request| {index: request.index, search: request.body}}
10
+ end
11
+
12
+ # show requests
13
+ def requests_expr
14
+ return @requests
15
+ end
16
+ # add requests
17
+ def add request
18
+ @requests.add(request)
19
+ return self
20
+ end
21
+
22
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Factory class for query classes
4
+ class QueryBuilders
5
+ # @return [Queries::BoolQueryBuilder]
6
+ # bool_query_builder object
7
+ def self.bool_query
8
+ Queries::BoolQueryBuilder.new
9
+ end
10
+
11
+ # @params [String] field_name
12
+ # field on which match query to be performed
13
+ # @params [String] value value to be matched
14
+ # @return [Queries::MatchQueryBuilder]
15
+ # match_query_builder object
16
+ def self.match_query(*args)
17
+ Queries::MatchQueryBuilder.new(*args)
18
+ end
19
+
20
+ # @params [String] field_name
21
+ # field on which term query to be performed
22
+ # @params [String] value value to be matched
23
+ # @return [Queries::TermQueryBuilder]
24
+ # term_query_builder object
25
+ def self.term_query(*args)
26
+ Queries::TermQueryBuilder.new(*args)
27
+ end
28
+
29
+ # @params [String] field_name
30
+ # field on which terms query to be performed
31
+ # @params [String] values values to be matched
32
+ # @return [Queries::TermsQueryBuilder]
33
+ # terms_query_builder object
34
+ def self.terms_query(*args)
35
+ Queries::TermsQueryBuilder.new(*args)
36
+ end
37
+
38
+ # @params [String] field_name
39
+ # field on which range query to be performed
40
+ # @return [Queries::RangeQueryBuilder]
41
+ # range_query_builder object
42
+ def self.range_query(*args)
43
+ Queries::RangeQueryBuilder.new(*args)
44
+ end
45
+
46
+ # @params [String] field_name
47
+ # field on which exists query to be performed
48
+ # @return [Queries::ExistsQueryBuilder]
49
+ # exists_query_builder object
50
+ def self.exists_query(*args)
51
+ Queries::ExistsQueryBuilder.new(*args)
52
+ end
53
+
54
+ # @params [Queries::QueryBuilder] inner_query
55
+ # query to be wrapped by constant score query
56
+ # @return [Queries::ConstantScoreQueryBuilder]
57
+ # constant_score_query_builder object
58
+ def self.constant_score_query(*args)
59
+ Queries::ConstantScoreQueryBuilder.new(*args)
60
+ end
61
+
62
+ # @return [Queries::DisMaxQueryBuilder]
63
+ # dis_max_query_builder object
64
+ def self.dis_max_query
65
+ Queries::DisMaxQueryBuilder.new
66
+ end
67
+
68
+ # @params [Queries::QueryBuilder] query
69
+ # query part in the function score query object
70
+ # @params [FunctionScores::ScoreFunctionBuilder] score_function
71
+ # score_function for the function score query object
72
+ # @params [Queries::FunctionScoreQueryBuilder::FilterFunctionBuilder]
73
+ # filter_functions filter functions for the function score query object
74
+ # @return [Queries::FunctionScorehQueryBuilder]
75
+ # function_score_query_builder object
76
+ def self.function_score_query(*args)
77
+ Queries::FunctionScoreQueryBuilder.new(*args)
78
+ end
79
+
80
+ # @params [String] path
81
+ # path to the nested field
82
+ # @params [Queries::QueryBuilder] inner_query
83
+ # query on the nested field
84
+ # @params [Enums::ScoreModes] score_mode
85
+ # score_mode for the matched documents
86
+ # @return [Queries::NestedQueryBuilder]
87
+ # nested_query_builder object
88
+ def self.nested_query(*args)
89
+ Queries::NestedQueryBuilder.new(*args)
90
+ end
91
+
92
+ # @params [String] field_name
93
+ # field on which exists query to be performed
94
+ # @return [Queries::GeoDistanceQueryBuilder]
95
+ # geo_distance_query_builder object
96
+ def self.geo_distance_query(*args)
97
+ Queries::GeoDistanceQueryBuilder.new(*args)
98
+ end
99
+
100
+ # @return [Queries::MAtchAllQueryBuilder]
101
+ # match_all_query_builder object
102
+ def self.match_all_query
103
+ Queries::MatchAllQueryBuilder.new
104
+ end
105
+ end
@@ -0,0 +1,53 @@
1
+ class RestClient
2
+
3
+ def initialize host: '127.0.0.1', port: 9200
4
+ @client = Elasticsearch::Client.new(host: host, port: port)
5
+ end
6
+
7
+ def search search_request
8
+ return @client.search(index: search_request.attributes.index, body: search_request.body)
9
+ end
10
+
11
+ def msearch msearch_request
12
+ return @client.msearch(body: msearch_request.body)
13
+ end
14
+
15
+ def index *args
16
+ return @client.index(*args)
17
+ end
18
+
19
+ def bulk *args
20
+ return @client.bulk(*args)
21
+ end
22
+
23
+ def create *args
24
+ return @client.create(*args)
25
+ end
26
+
27
+ def delete *args
28
+ return @client.delete(*args)
29
+ end
30
+
31
+ def delete_by_query *args
32
+ args.first[:body] = SearchSourceBuilder.new.query(args.first[:body]).body
33
+ return @client.delete_by_query(*args)
34
+ end
35
+
36
+ def get *args
37
+ return @client.get(*args)
38
+ end
39
+
40
+ def mget *args
41
+ return @client.mget(*args)
42
+ end
43
+
44
+ def update *args
45
+ return @client.update(*args)
46
+ end
47
+
48
+ def update_by_query *args
49
+ args.first[:body] = SearchSourceBuilder.new.query(args.first[:body]).body
50
+ return @client.update_by_query(*args)
51
+ end
52
+
53
+ end
@@ -0,0 +1,33 @@
1
+ class SearchRequest
2
+ include AttributesReader
3
+
4
+ def initialize
5
+ @index = ''
6
+ @body = nil
7
+ end
8
+
9
+ def body
10
+ return @source.body
11
+ end
12
+
13
+ # returns index
14
+ def index_expr
15
+ return @index
16
+ end
17
+ # sets index
18
+ def index index
19
+ @index= index
20
+ return self
21
+ end
22
+
23
+ # returns source
24
+ def source_expr
25
+ return @body
26
+ end
27
+ # sets source
28
+ def source source
29
+ @source = source
30
+ return self
31
+ end
32
+
33
+ end
@@ -0,0 +1,151 @@
1
+ # A search source builder allowing to easily build search source.
2
+ class SearchSourceBuilder
3
+ include AttributesReader
4
+
5
+ def initialize
6
+ @query = nil
7
+ @aggregations = []
8
+ @sort = []
9
+ @source = []
10
+ @size = nil
11
+ @explain = nil
12
+ @from = nil
13
+ @min_score = nil
14
+ @terminate_after = nil
15
+ @timeout = nil
16
+ @version = nil
17
+ end
18
+
19
+ def body
20
+ body = {}
21
+ body[:query] = @query.query
22
+ body[:aggregations] = @aggregations.map{|agg| agg.query}.reduce({}, :merge) if @aggregations.present?
23
+ body[:sort] = @sort.map{|sort_object| sort_object.query} if @sort.present?
24
+ body[:_source] = @source
25
+ body[:size] = @size
26
+ body[:explain] = @explain
27
+ body[:from] = @from
28
+ body[:min_score] = @min_score
29
+ body[:terminate_after] = @terminate_after
30
+ body[:timeout] = @timeout
31
+ body[:version] = @version
32
+ return body.compact
33
+ end
34
+
35
+ # returns query
36
+ def query_expr
37
+ return @query
38
+ end
39
+ # sets query
40
+ def query query
41
+ @query = query
42
+ return self
43
+ end
44
+
45
+ # returns aggregation
46
+ def aggregations_expr
47
+ return @aggregations
48
+ end
49
+ # sets aggregation
50
+ def aggregations agg_builder
51
+ if agg_builder.is_a?(Array)
52
+ @aggregations += agg_builder
53
+ else
54
+ @aggregations.append(agg_builder)
55
+ end
56
+ return self
57
+ end
58
+
59
+ # returns sort
60
+ def sort_expr
61
+ return @sort
62
+ end
63
+ # appends sort
64
+ def sort sort, reset: false
65
+ @sort = [] if reset
66
+ sort.is_a?(Array) ? @sort+= sort : @sort.append(sort)
67
+ return self
68
+ end
69
+
70
+ # returns source_fields
71
+ def source_expr
72
+ return @source
73
+ end
74
+ # sets source_fields
75
+ def source source_field, reset: false
76
+ @source = [] if reset
77
+ source_field.is_a?(Array) ? @source+= source_field : @source.append(source_field)
78
+ return self
79
+ end
80
+
81
+ # returns size
82
+ def size_expr
83
+ return @size
84
+ end
85
+ # sets size
86
+ def size size
87
+ @size = size
88
+ return self
89
+ end
90
+
91
+ # returns explain
92
+ def explain_expr
93
+ return @explain
94
+ end
95
+ # sets explain
96
+ def explain explain
97
+ @explain = explain
98
+ return self
99
+ end
100
+
101
+ # returns from
102
+ def from_expr
103
+ return @from
104
+ end
105
+ # sets from
106
+ def from from
107
+ @from = from
108
+ return self
109
+ end
110
+
111
+ # returns min_score
112
+ def min_score_expr
113
+ return @min_score
114
+ end
115
+ # sets min_score
116
+ def min_score min_score
117
+ @min_score = min_score
118
+ return self
119
+ end
120
+
121
+ # returns terminate_after
122
+ def terminate_after_expr
123
+ return @terminate_after
124
+ end
125
+ # sets terminate_after
126
+ def terminate_after terminate_after
127
+ @terminate_after = terminate_after
128
+ return self
129
+ end
130
+
131
+ # returns timeout
132
+ def timeout_expr
133
+ return @timeout
134
+ end
135
+ # sets timeout
136
+ def timeout timeout
137
+ @timeout = timeout
138
+ return self
139
+ end
140
+
141
+ # returns version
142
+ def version_expr
143
+ return @version
144
+ end
145
+ # sets version
146
+ def version version
147
+ @version = version
148
+ return self
149
+ end
150
+
151
+ end
@@ -0,0 +1,23 @@
1
+ class SortBuilders
2
+
3
+ def self.field_sort *args
4
+ return Sort::FieldSortBuilder.new(*args)
5
+ end
6
+
7
+ def self.geo_distance_sort *args
8
+ return Sort::GeoDistanceSortBuilder.new(*args)
9
+ end
10
+
11
+ def self.nested_sort *args
12
+ return Sort::NestedSortBuilder.new(*args)
13
+ end
14
+
15
+ def self.score_sort
16
+ return Sort::ScoreSortBuilder.new
17
+ end
18
+
19
+ def self.script_sort *args
20
+ return Sort::ScriptSortBuilder.new(*args)
21
+ end
22
+
23
+ end
@@ -0,0 +1,29 @@
1
+ Dir["/root/housing/es.query.builder/lib/*_helper.rb"].each {|file| require file }
2
+ Dir["/root/housing/es.query.builder/lib/*_builder.rb"].each {|file| require file }
3
+ Dir["/root/housing/es.query.builder/lib/*_builders.rb"].each {|file| require file }
4
+ Dir["/root/housing/es.query.builder/lib/script.rb"].each {|file| require file }
5
+ require 'active_support/all'
6
+
7
+ script1 = Script.new("ctx._source.likes*modifier", {"modifier": 2}, :INLINE)
8
+ t1 = AggregationBuilders.terms('term1').field('age').include(['anu1', 'anu2', 'anu3']).add_order('anu1').add_order('anu4').script(script1)
9
+ puts t1.get_query
10
+ t2 = AggregationBuilders.filter('filter1', {:bool => {:must => [{:f1 => 'v1'}]}}).sub_aggregation(t1)
11
+ puts t2.get_query
12
+ t3 = AggregationBuilders.geohash_grid('geo1').size(10).precision(5).sub_aggregation(t1)
13
+ puts t3.get_query
14
+ t4 = AggregationBuilders.top_hits('thits1').add_sort(:f1).add_sort(:f2, :asc).source(['a1', 'a2']).sub_aggregation(t1)
15
+ puts t4.get_query
16
+ t5 = AggregationBuilders.reverse_nested('rnested1').sub_aggregation(t1)
17
+ puts t5.get_query
18
+ t6 = AggregationBuilders.nested('nested1', 'room_types').sub_aggregation(t5)
19
+ puts t6.get_query
20
+ t7 = AggregationBuilders.date_histogram('dhist1').field('age').interval('M').add_order('anu1').add_order('anu4')
21
+ puts t7.get_query
22
+ t8 = AggregationBuilders.histogram('hist1').field('age').interval('M').add_order('anu1').add_order('anu4')
23
+ puts t8.get_query
24
+ t9 = AggregationBuilders.date_range('drange1').field('start_date').add_range("2016/02/01", "2017/02/01", 'older').add_range("2017/02/01", nil)
25
+ puts t9.get_query
26
+ t10 = AggregationBuilders.range('range1').field('age').add_range(10, 100, 'older').add_range(200, nil).keyed(true)
27
+ puts t10.get_query
28
+ t11 = AggregationBuilders.max('max1').field('age').missing(10)
29
+ puts t11.get_query
metadata CHANGED
@@ -1,14 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: es_query_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mohib Yousuf
8
+ - Anurag Agrawal
9
+ - Supantha Samanta
10
+ - Neeraj Joshi
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
14
+ date: 2019-10-07 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: rails
@@ -44,17 +47,59 @@ dependencies:
44
47
  - - ">="
45
48
  - !ruby/object:Gem::Version
46
49
  version: '0'
50
+ - !ruby/object:Gem::Dependency
51
+ name: activesupport
52
+ requirement: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ - !ruby/object:Gem::Dependency
65
+ name: rspec
66
+ requirement: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '='
69
+ - !ruby/object:Gem::Version
70
+ version: 3.5.0
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 3.5.0
47
78
  description:
48
- email: mohib.yousuf@hotmail.com
79
+ email:
80
+ - mohib.yousuf@hotmail.com
81
+ - anuragagrawal117@gmail.com
82
+ - supantha.samanta@gmail.com
83
+ - neerajjoshi00@gmail.com
49
84
  executables: []
50
85
  extensions: []
51
86
  extra_rdoc_files: []
52
87
  files:
88
+ - lib/aggregation_builders.rb
89
+ - lib/attributes_reader.rb
53
90
  - lib/constants.rb
54
91
  - lib/elastic_search_query.rb
55
92
  - lib/es_query_builder.rb
56
93
  - lib/fetch_es_data.rb
94
+ - lib/function_score_builders.rb
57
95
  - lib/indexer.rb
96
+ - lib/multi_search_request.rb
97
+ - lib/query_builders.rb
98
+ - lib/rest_client.rb
99
+ - lib/search_request.rb
100
+ - lib/search_source_builder.rb
101
+ - lib/sort_builders.rb
102
+ - lib/test_script.rb
58
103
  - lib/token_query_builder.rb
59
104
  homepage: https://github.com/elarahq/es.query.builder
60
105
  licenses:
@@ -76,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
121
  version: '0'
77
122
  requirements: []
78
123
  rubyforge_project:
79
- rubygems_version: 2.6.12
124
+ rubygems_version: 2.6.11
80
125
  signing_key:
81
126
  specification_version: 4
82
127
  summary: For Building Elastic Search Queries