stretchy-model 0.5.0 → 0.6.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 +4 -4
- data/lib/rails/instrumentation/railtie.rb +2 -0
- data/lib/stretchy/associations.rb +1 -1
- data/lib/stretchy/attributes/type/array.rb +16 -11
- data/lib/stretchy/attributes/type/base.rb +42 -0
- data/lib/stretchy/attributes/type/binary.rb +45 -0
- data/lib/stretchy/attributes/type/boolean.rb +48 -0
- data/lib/stretchy/attributes/type/completion.rb +25 -0
- data/lib/stretchy/attributes/type/constant_keyword.rb +38 -0
- data/lib/stretchy/attributes/type/date_time.rb +35 -0
- data/lib/stretchy/attributes/type/dense_vector.rb +59 -0
- data/lib/stretchy/attributes/type/flattened.rb +31 -0
- data/lib/stretchy/attributes/type/geo_point.rb +27 -0
- data/lib/stretchy/attributes/type/geo_shape.rb +27 -0
- data/lib/stretchy/attributes/type/hash.rb +36 -13
- data/lib/stretchy/attributes/type/histogram.rb +7 -0
- data/lib/stretchy/attributes/type/ip.rb +29 -0
- data/lib/stretchy/attributes/type/join.rb +22 -0
- data/lib/stretchy/attributes/type/keyword.rb +36 -10
- data/lib/stretchy/attributes/type/match_only_text.rb +8 -0
- data/lib/stretchy/attributes/type/nested.rb +25 -0
- data/lib/stretchy/attributes/type/numeric/base.rb +32 -0
- data/lib/stretchy/attributes/type/numeric/byte.rb +7 -0
- data/lib/stretchy/attributes/type/numeric/double.rb +7 -0
- data/lib/stretchy/attributes/type/numeric/float.rb +7 -0
- data/lib/stretchy/attributes/type/numeric/half_float.rb +7 -0
- data/lib/stretchy/attributes/type/numeric/integer.rb +7 -0
- data/lib/stretchy/attributes/type/numeric/long.rb +7 -0
- data/lib/stretchy/attributes/type/numeric/scaled_float.rb +23 -0
- data/lib/stretchy/attributes/type/numeric/short.rb +7 -0
- data/lib/stretchy/attributes/type/numeric/unsigned_long.rb +7 -0
- data/lib/stretchy/attributes/type/percolator.rb +23 -0
- data/lib/stretchy/attributes/type/point.rb +24 -0
- data/lib/stretchy/attributes/type/range/base.rb +9 -0
- data/lib/stretchy/attributes/type/range/date_range.rb +17 -0
- data/lib/stretchy/attributes/type/range/double_range.rb +17 -0
- data/lib/stretchy/attributes/type/range/float_range.rb +16 -0
- data/lib/stretchy/attributes/type/range/integer_range.rb +16 -0
- data/lib/stretchy/attributes/type/range/ip_range.rb +16 -0
- data/lib/stretchy/attributes/type/range/long_range.rb +16 -0
- data/lib/stretchy/attributes/type/rank_feature.rb +21 -0
- data/lib/stretchy/attributes/type/rank_features.rb +24 -0
- data/lib/stretchy/attributes/type/search_as_you_type.rb +30 -0
- data/lib/stretchy/attributes/type/shape.rb +24 -0
- data/lib/stretchy/attributes/type/sparse_vector.rb +37 -0
- data/lib/stretchy/attributes/type/string.rb +7 -0
- data/lib/stretchy/attributes/type/text.rb +50 -11
- data/lib/stretchy/attributes/type/token_count.rb +26 -0
- data/lib/stretchy/attributes/type/version.rb +21 -0
- data/lib/stretchy/attributes/type/wildcard.rb +35 -0
- data/lib/stretchy/attributes.rb +46 -0
- data/lib/stretchy/common.rb +3 -2
- data/lib/stretchy/delegation/gateway_delegation.rb +2 -4
- data/lib/stretchy/querying.rb +3 -3
- data/lib/stretchy/record.rb +1 -1
- data/lib/stretchy/relation.rb +1 -1
- data/lib/stretchy/relations/finder_methods.rb +19 -2
- data/lib/stretchy/relations/query_builder.rb +7 -1
- data/lib/stretchy/scoping/named.rb +1 -1
- data/lib/stretchy/version.rb +1 -1
- data/lib/stretchy.rb +5 -1
- metadata +45 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f23580fe0c8761ced02da75cbc44f16ab7893a559d30d9a5e0de23aa96ed790a
|
4
|
+
data.tar.gz: 821381d3e9e92822d71aac637d98f8b04a76736a80e421ca7d2c4fd05fd108d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99dc36ee6cce021e869a8e1f3e2f005f546b1c50bf973434c624574c1dd601757baf4a1d39562f7ddd05bf4a1e640512111b821d8a70b8d5416bf73701b38f03
|
7
|
+
data.tar.gz: 4a58307bd7ae5a5781e7462df9c95438f66eecab5d0ae43238878d228e2ca6939a8a7643b70ac3c2586dcae537935206bfb15339415f6b3c3a70ef2518e401b4
|
@@ -4,6 +4,8 @@ module Stretchy
|
|
4
4
|
class Railtie < ::Rails::Railtie
|
5
5
|
|
6
6
|
require 'rails/instrumentation/publishers'
|
7
|
+
Stretchy.instrument!
|
8
|
+
|
7
9
|
ActiveSupport::Notifications.subscribe 'search.stretchy' do |name, start, finish, id, payload|
|
8
10
|
message = [
|
9
11
|
Rainbow(" #{payload[:klass]}").bright,
|
@@ -38,7 +38,7 @@ module Stretchy
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def association_reflection(association)
|
41
|
-
Stretchy::Relation.new @@_associations[association], (dirty[association.to_sym] ||
|
41
|
+
Stretchy::Relation.new @@_associations[association], (dirty[association.to_sym] || {})
|
42
42
|
end
|
43
43
|
|
44
44
|
def _destroy=(bool)
|
@@ -1,15 +1,20 @@
|
|
1
|
-
module Stretchy
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def type
|
8
|
-
:array
|
9
|
-
end
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
class Array < Stretchy::Attributes::Type::Base # :nodoc:
|
3
|
+
OPTIONS = [:data_type, :fields]
|
4
|
+
def type
|
5
|
+
:array
|
6
|
+
end
|
10
7
|
|
11
|
-
|
8
|
+
def type_for_database
|
9
|
+
data_type || :text
|
10
|
+
end
|
12
11
|
|
13
|
-
|
12
|
+
def mappings(name)
|
13
|
+
options = {type: type_for_database}
|
14
|
+
self.class::OPTIONS.each { |option| options[option] = send(option) unless send(option).nil? }
|
15
|
+
options.delete(:fields) if fields == false
|
16
|
+
options[:fields] = {keyword: {type: :keyword, ignore_above: 256}} if type_for_database == :text && fields.nil?
|
17
|
+
{ name => options }.as_json
|
14
18
|
end
|
19
|
+
end
|
15
20
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Stretchy
|
2
|
+
module Attributes
|
3
|
+
module Type
|
4
|
+
class Base < ActiveModel::Type::Value
|
5
|
+
|
6
|
+
OPTIONS = []
|
7
|
+
|
8
|
+
|
9
|
+
def initialize(**args)
|
10
|
+
|
11
|
+
define_option_methods!
|
12
|
+
|
13
|
+
args.each do |k, v|
|
14
|
+
if self.class::OPTIONS.include?(k)
|
15
|
+
instance_variable_set("@#{k}", v)
|
16
|
+
args.delete(k)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def mappings(name)
|
23
|
+
options = {type: type_for_database}
|
24
|
+
self.class::OPTIONS.each { |option| options[option] = send(option) unless send(option).nil? }
|
25
|
+
{ name => options }.as_json
|
26
|
+
end
|
27
|
+
|
28
|
+
def type_for_database
|
29
|
+
type
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def define_option_methods!
|
35
|
+
self.class::OPTIONS.each do |option|
|
36
|
+
define_singleton_method(option.to_sym) { instance_variable_get("@#{option}") }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Public: Defines a binary attribute for the model.
|
2
|
+
#
|
3
|
+
# name - The Symbol name of the attribute.
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion.
|
6
|
+
# This allows it to be used later for sorting, aggregations, or scripting. Defaults to false.
|
7
|
+
# :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
|
8
|
+
#
|
9
|
+
# Examples
|
10
|
+
#
|
11
|
+
# class MyModel
|
12
|
+
# include StretchyModel
|
13
|
+
# attribute :name, :binary, doc_values: true, store: true
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# Returns nothing.
|
17
|
+
module Stretchy
|
18
|
+
module Attributes
|
19
|
+
module Type
|
20
|
+
class Binary < ActiveModel::Type::Value
|
21
|
+
OPTIONS = [:doc_values, :store]
|
22
|
+
attr_reader *OPTIONS
|
23
|
+
|
24
|
+
def initialize(**args)
|
25
|
+
args.each do |k, v|
|
26
|
+
instance_variable_set("@#{k}", v) if OPTIONS.include?(k)
|
27
|
+
args.delete(k)
|
28
|
+
end
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
def type
|
33
|
+
:binary
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def mappings(name)
|
38
|
+
options = {type: type}
|
39
|
+
OPTIONS.each { |_| options[_] = self.send(_) }
|
40
|
+
{ name => options }.as_json
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Public: Defines a boolean attribute for the model.
|
2
|
+
#
|
3
|
+
# name - The Symbol name of the attribute.
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion.
|
6
|
+
# This allows it to be used later for sorting, aggregations, or scripting. Defaults to true.
|
7
|
+
# :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
|
8
|
+
# :ignore_malformed - The Boolean indicating if exceptions thrown when trying to index the wrong data type into a field should be ignored. Defaults to false.
|
9
|
+
# :null_value - The Boolean value to be substituted for any explicit null values. Defaults to null.
|
10
|
+
# :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
|
11
|
+
# :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
|
12
|
+
# :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
|
13
|
+
# :meta - The Hash metadata about the field.
|
14
|
+
#
|
15
|
+
# Examples
|
16
|
+
#
|
17
|
+
# class MyModel
|
18
|
+
# include StretchyModel
|
19
|
+
# attribute :name, :boolean, doc_values: true, store: true
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# Returns nothing.
|
23
|
+
module Stretchy
|
24
|
+
module Attributes
|
25
|
+
module Type
|
26
|
+
class Boolean < Stretchy::Attributes::Type::Base
|
27
|
+
|
28
|
+
OPTIONS = [:doc_values, :index, :ignore_malformed, :null_value, :on_script_error, :script, :store, :meta]
|
29
|
+
attr_reader *OPTIONS
|
30
|
+
|
31
|
+
def initialize(**args)
|
32
|
+
args.each do |k, v|
|
33
|
+
instance_variable_set("@#{k}", v) if OPTIONS.include?(k)
|
34
|
+
args.delete(k)
|
35
|
+
end
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
39
|
+
def type
|
40
|
+
:boolean
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a completion attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :analyzer - The String index analyzer to use. Defaults to 'simple'.
|
6
|
+
# :search_analyzer - The String search analyzer to use. Defaults to the value of :analyzer.
|
7
|
+
# :preserve_separators - The Boolean indicating if separators should be preserved. Defaults to true.
|
8
|
+
# :preserve_position_increments - The Boolean indicating if position increments should be enabled. Defaults to true.
|
9
|
+
# :max_input_length - The Integer limit for the length of a single input. Defaults to 50.
|
10
|
+
#
|
11
|
+
# Examples
|
12
|
+
#
|
13
|
+
# class MyModel < Stretchy::Record
|
14
|
+
# attribute :name, :completion, analyzer: 'simple', max_input_length: 100
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# Returns nothing.
|
18
|
+
class Completion < Stretchy::Attributes::Type::Base
|
19
|
+
OPTIONS = [:analyzer, :search_analyzer, :preserve_separators, :preserve_position_increments, :max_input_length]
|
20
|
+
attr_reader *OPTIONS
|
21
|
+
def type
|
22
|
+
:completion
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a constant_keyword attribute for the model. This field type is a specialization of the keyword field, but it only accepts a single value.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
|
6
|
+
# :eager_global_ordinals - The Boolean indicating if global ordinals should be loaded eagerly on refresh. Defaults to false.
|
7
|
+
# :fields - The Hash of multi-fields for the same string value to be indexed in multiple ways.
|
8
|
+
# :ignore_above - The Integer limit for the length of the string. Strings longer than this limit will not be indexed. Defaults to 2147483647.
|
9
|
+
# :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
|
10
|
+
# :index_options - The String indicating what information should be stored in the index for scoring purposes. Defaults to 'docs'.
|
11
|
+
# :meta - The Hash metadata about the field.
|
12
|
+
# :norms - The Boolean indicating if field-length should be taken into account when scoring queries. Defaults to false.
|
13
|
+
# :null_value - The String value to be substituted for any explicit null values. Defaults to null.
|
14
|
+
# :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
|
15
|
+
# :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
|
16
|
+
# :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
|
17
|
+
# :similarity - The String scoring algorithm or similarity to be used. Defaults to 'BM25'.
|
18
|
+
# :normalizer - The String pre-processor for the keyword prior to indexing. Defaults to null.
|
19
|
+
# :split_queries_on_whitespace - The Boolean indicating if full text queries should split the input on whitespace. Defaults to false.
|
20
|
+
# :time_series_dimension - The Boolean indicating if the field is a time series dimension. Defaults to false.
|
21
|
+
# :value - The String value to associate with all documents in the index.
|
22
|
+
#
|
23
|
+
# Examples
|
24
|
+
#
|
25
|
+
# class MyModel
|
26
|
+
# include StretchyModel
|
27
|
+
# attribute :status, :constant_keyword, value: 'active'
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# Returns nothing.
|
31
|
+
class ConstantKeyword < Stretchy::Attributes::Type::Keyword
|
32
|
+
OPTIONS = OPTIONS + [:value]
|
33
|
+
attr_reader *OPTIONS
|
34
|
+
def type
|
35
|
+
:constant_keyword
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a datetime attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion.
|
6
|
+
# This allows it to be used later for sorting, aggregations, or scripting. Defaults to true.
|
7
|
+
# :format - The String date format(s) that can be parsed. Defaults to 'strict_date_optional_time||epoch_millis'.
|
8
|
+
# :locale - The String locale to use when parsing dates. Defaults to the ROOT locale.
|
9
|
+
# :ignore_malformed - The Boolean indicating if malformed numbers should be ignored. Defaults to false.
|
10
|
+
# :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
|
11
|
+
# :null_value - The Date value to be substituted for any explicit null values. Defaults to null.
|
12
|
+
# :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
|
13
|
+
# :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
|
14
|
+
# :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
|
15
|
+
# :meta - The Hash metadata about the field.
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
# class MyModel < Stretchy::Record
|
20
|
+
# attribute :created_at, :datetime, format: 'strict_date_optional_time||epoch_millis', locale: 'en'
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# Returns nothing.
|
24
|
+
class DateTime < Stretchy::Attributes::Type::Base
|
25
|
+
OPTIONS = [:doc_values, :format, :locale, :ignore_malformed, :index, :null_value, :on_script_error, :script, :store, :meta]
|
26
|
+
attr_reader *OPTIONS
|
27
|
+
def type
|
28
|
+
:datetime
|
29
|
+
end
|
30
|
+
|
31
|
+
def type_for_database
|
32
|
+
:date
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Public: Defines a dense vector attribute for the model.
|
2
|
+
#
|
3
|
+
# name - The Symbol name of the attribute.
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :element_type - The String data type used to encode vectors. Can be 'float' or 'byte'.
|
6
|
+
# 'float' indexes a 4-byte floating-point value per dimension.
|
7
|
+
# 'byte' indexes a 1-byte integer value per dimension.
|
8
|
+
# Vectors using 'byte' require dimensions with integer values between -128 to 127.
|
9
|
+
# :dims - The Integer number of vector dimensions. Can’t exceed 4096.
|
10
|
+
# If not specified, it will be set to the length of the first vector added to the field.
|
11
|
+
# :index - The Boolean indicating if you can search this field using the kNN search API (default: true).
|
12
|
+
# :similarity - The String vector similarity metric to use in kNN search. Can be 'l2_norm', 'dot_product', 'cosine', or 'max_inner_product'.
|
13
|
+
# This parameter can only be specified when :index is true.
|
14
|
+
# :index_options - The Hash that configures the kNN indexing algorithm. Can only be specified when :index is true.
|
15
|
+
# :type - The String type of kNN algorithm to use. Can be either 'hnsw' or 'int8_hnsw'.
|
16
|
+
# :m - The Integer number of neighbors each node will be connected to in the HNSW graph.
|
17
|
+
# :ef_construction - The Integer number of candidates to track while assembling the list of nearest neighbors for each new node.
|
18
|
+
# :confidence_interval - The Float confidence interval to use when quantizing the vectors. Only applicable to 'int8_hnsw' index types.
|
19
|
+
#
|
20
|
+
# Examples
|
21
|
+
#
|
22
|
+
# class MyModel
|
23
|
+
# include StretchyModel
|
24
|
+
# attribute :vector_embeddings, :dense_vector, element_type: 'float', dims: 3
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# Returns nothing.
|
28
|
+
module Stretchy
|
29
|
+
module Attributes
|
30
|
+
module Type
|
31
|
+
class DenseVector < Stretchy::Attributes::Type::Base
|
32
|
+
OPTIONS = [:element_type, :dims, :index, :similarity, :index_options]
|
33
|
+
attr_reader *OPTIONS
|
34
|
+
|
35
|
+
def initialize(**args)
|
36
|
+
args.each do |k, v|
|
37
|
+
instance_variable_set("@#{k}", v) if OPTIONS.include?(k)
|
38
|
+
args.delete(k)
|
39
|
+
end
|
40
|
+
super
|
41
|
+
end
|
42
|
+
|
43
|
+
def type
|
44
|
+
:dense_vector
|
45
|
+
end
|
46
|
+
|
47
|
+
def mappings(name)
|
48
|
+
options = {type: type}
|
49
|
+
OPTIONS.each { |_| options[_] = self.send(_) }
|
50
|
+
{
|
51
|
+
properties: {
|
52
|
+
"#{name}.tokens": options
|
53
|
+
}
|
54
|
+
}.as_json
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a flattened attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :depth_limit - The Integer maximum allowed depth of the flattened object field. Defaults to 20.
|
6
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
|
7
|
+
# :eager_global_ordinals - The Boolean indicating if global ordinals should be loaded eagerly on refresh. Defaults to false.
|
8
|
+
# :ignore_above - The Integer limit for the length of leaf values. Values longer than this limit will not be indexed. By default, there is no limit.
|
9
|
+
# :index - The Boolean indicating if the field should be searchable. Defaults to true.
|
10
|
+
# :index_options - The String indicating what information should be stored in the index for scoring purposes. Defaults to 'docs'.
|
11
|
+
# :null_value - The String value to be substituted for any explicit null values. Defaults to null.
|
12
|
+
# :similarity - The String scoring algorithm or similarity to be used. Defaults to 'BM25'.
|
13
|
+
# :split_queries_on_whitespace - The Boolean indicating if full text queries should split the input on whitespace. Defaults to false.
|
14
|
+
# :time_series_dimensions - The Array of Strings indicating the fields inside the flattened object that are dimensions of the time series.
|
15
|
+
#
|
16
|
+
# Examples
|
17
|
+
#
|
18
|
+
# class MyModel
|
19
|
+
# include StretchyModel
|
20
|
+
# attribute :metadata, :flattened, depth_limit: 10, index_options: 'freqs'
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# Returns nothing.
|
24
|
+
class Flattened < Stretchy::Attributes::Type::Base
|
25
|
+
OPTIONS = [:depth_limit, :doc_values, :eager_global_ordinals, :ignore_above, :index, :index_options, :null_value, :similarity, :split_queries_on_whitespace, :time_series_dimensions]
|
26
|
+
|
27
|
+
def type
|
28
|
+
:flattened
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a geo_point attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :ignore_malformed - The Boolean indicating if malformed geopoints should be ignored. Defaults to false.
|
6
|
+
# :ignore_z_value - The Boolean indicating if three dimension points should be accepted but only latitude and longitude values should be indexed. Defaults to true.
|
7
|
+
# :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
|
8
|
+
# :null_value - The GeoPoint value to be substituted for any explicit null values. Defaults to null.
|
9
|
+
# :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
|
10
|
+
# :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
|
11
|
+
#
|
12
|
+
# Examples
|
13
|
+
#
|
14
|
+
# class MyModel
|
15
|
+
# include StretchyModel
|
16
|
+
# attribute :location, :geo_point, ignore_malformed: true
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# Returns nothing.
|
20
|
+
class GeoPoint < Stretchy::Attributes::Type::Base
|
21
|
+
OPTIONS = [:ignore_malformed, :ignore_z_value, :index, :null_value, :on_script_error, :script]
|
22
|
+
|
23
|
+
def type
|
24
|
+
:geo_point
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a geo_shape attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :orientation - The String default orientation for the field’s WKT polygons. Can be 'right', 'counterclockwise', 'ccw', 'left', 'clockwise', or 'cw'. Defaults to 'right'.
|
6
|
+
# :ignore_malformed - The Boolean indicating if malformed GeoJSON or WKT shapes should be ignored. Defaults to false.
|
7
|
+
# :ignore_z_value - The Boolean indicating if three dimension points should be accepted but only latitude and longitude values should be indexed. Defaults to true.
|
8
|
+
# :coerce - The Boolean indicating if unclosed linear rings in polygons should be automatically closed. Defaults to false.
|
9
|
+
# :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
|
10
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
|
11
|
+
#
|
12
|
+
# Examples
|
13
|
+
#
|
14
|
+
# class MyModel
|
15
|
+
# include StretchyModel
|
16
|
+
# attribute :boundary, :geo_shape, orientation: 'left', coerce: true
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# Returns nothing.
|
20
|
+
class GeoShape < Stretchy::Attributes::Type::Base
|
21
|
+
OPTIONS = [:orientation, :ignore_malformed, :ignore_z_value, :coerce, :index, :doc_values]
|
22
|
+
|
23
|
+
def type
|
24
|
+
:geo_shape
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,17 +1,40 @@
|
|
1
|
-
module Stretchy
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a hash attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :dynamic - The String indicating if new properties should be added dynamically to an existing object. Can be 'true', 'runtime', 'false', or 'strict'. Defaults to 'true'.
|
6
|
+
# :enabled - The Boolean indicating if the JSON value for the object field should be parsed and indexed. Defaults to true.
|
7
|
+
# :subobjects - The Boolean indicating if the object can hold subobjects. Defaults to true.
|
8
|
+
# :properties - The Hash of fields within the object, which can be of any data type, including object.
|
9
|
+
#
|
10
|
+
# Examples
|
11
|
+
#
|
12
|
+
# class MyModel < Stretchy::Record
|
13
|
+
# attribute :metadata, :hash, dynamic: 'strict', subobjects: false
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# Returns nothing.
|
17
|
+
class Hash < Stretchy::Attributes::Type::Base
|
18
|
+
OPTIONS = [:dynamic, :enabled, :subobjects, :properties]
|
8
19
|
|
9
|
-
|
20
|
+
def type
|
21
|
+
:hash
|
22
|
+
end
|
23
|
+
|
24
|
+
def type_for_database
|
25
|
+
:object
|
26
|
+
end
|
27
|
+
|
28
|
+
def mappings(name)
|
29
|
+
options = {}
|
30
|
+
OPTIONS.each { |option| options[option] = send(option) unless send(option).nil? }
|
31
|
+
{ name => options }.as_json
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
10
35
|
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
36
|
+
def cast_value(value)
|
37
|
+
Elasticsearch::Model::HashWrapper[value]
|
16
38
|
end
|
39
|
+
end
|
17
40
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines an IP attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
|
6
|
+
# :ignore_malformed - The Boolean indicating if malformed IP addresses should be ignored. Defaults to false.
|
7
|
+
# :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
|
8
|
+
# :null_value - The String IPv4 or IPv6 value to be substituted for any explicit null values. Defaults to null.
|
9
|
+
# :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'reject' or 'ignore'.
|
10
|
+
# :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
|
11
|
+
# :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
|
12
|
+
# :time_series_dimension - The Boolean indicating if the field is a time series dimension. Defaults to false.
|
13
|
+
#
|
14
|
+
# Examples
|
15
|
+
#
|
16
|
+
# class MyModel
|
17
|
+
# include StretchyModel
|
18
|
+
# attribute :ip_address, :ip, ignore_malformed: true, time_series_dimension: true
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# Returns nothing.
|
22
|
+
class IP < Stretchy::Attributes::Type::Base
|
23
|
+
OPTIONS = [:doc_values, :ignore_malformed, :index, :null_value, :on_script_error, :script, :store, :time_series_dimension]
|
24
|
+
|
25
|
+
def type
|
26
|
+
:ip
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a join attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to define the parent/child relation within documents of the same index (default: {}):
|
5
|
+
# :relations - The Hash defining a set of possible relations within the documents, each relation being a parent name and a child name.
|
6
|
+
#
|
7
|
+
# Examples
|
8
|
+
#
|
9
|
+
# class MyModel
|
10
|
+
# include StretchyModel
|
11
|
+
# attribute :relation, :join, relations: { question: :answer }
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# Returns nothing.
|
15
|
+
class Join < Stretchy::Attributes::Type::Base
|
16
|
+
OPTIONS = [:relations]
|
17
|
+
|
18
|
+
def type
|
19
|
+
:join
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,11 +1,37 @@
|
|
1
|
-
module Stretchy
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a keyword attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
#
|
6
|
+
# :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
|
7
|
+
# :eager_global_ordinals - The Boolean indicating if global ordinals should be loaded eagerly on refresh. Defaults to false.
|
8
|
+
# :fields - The Hash of multi-fields for the same string value to be indexed in multiple ways.
|
9
|
+
# :ignore_above - The Integer limit for the length of the string. Strings longer than this limit will not be indexed. Defaults to 2147483647.
|
10
|
+
# :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
|
11
|
+
# :index_options - The String indicating what information should be stored in the index for scoring purposes. Defaults to 'docs'.
|
12
|
+
# :meta - The Hash metadata about the field.
|
13
|
+
# :norms - The Boolean indicating if field-length should be taken into account when scoring queries. Defaults to false.
|
14
|
+
# :null_value - The String value to be substituted for any explicit null values. Defaults to null.
|
15
|
+
# :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
|
16
|
+
# :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
|
17
|
+
# :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
|
18
|
+
# :similarity - The String scoring algorithm or similarity to be used. Defaults to 'BM25'.
|
19
|
+
# :normalizer - The String pre-processor for the keyword prior to indexing. Defaults to null.
|
20
|
+
# :split_queries_on_whitespace - The Boolean indicating if full text queries should split the input on whitespace. Defaults to false.
|
21
|
+
# :time_series_dimension - The Boolean indicating if the field is a time series dimension. Defaults to false.
|
22
|
+
#
|
23
|
+
# Examples
|
24
|
+
# class MyModel
|
25
|
+
# include StretchyModel
|
26
|
+
# attribute :tag, :keyword, ignore_above: 256, time_series_dimension: true
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# Returns nothing.
|
30
|
+
class Keyword < Stretchy::Attributes::Type::Base
|
31
|
+
OPTIONS = [:doc_values, :eager_global_ordinals, :fields, :ignore_above, :index, :index_options, :meta, :norms, :null_value, :on_script_error, :script, :store, :similarity, :normalizer, :split_queries_on_whitespace, :time_series_dimension]
|
32
|
+
|
33
|
+
def type
|
34
|
+
:keyword
|
35
|
+
end
|
10
36
|
end
|
11
|
-
end
|
37
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# a space-optimized variant of text that disables scoring and performs slower on queries that need positions. It is best suited for indexing log messages.
|
2
|
+
module Stretchy::Attributes::Type
|
3
|
+
class MatchOnlyText < Stretchy::Attributes::Type::Text
|
4
|
+
def type
|
5
|
+
:match_only_text
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Stretchy::Attributes::Type
|
2
|
+
# Public: Defines a nested attribute for the model.
|
3
|
+
#
|
4
|
+
# opts - The Hash options used to refine the attribute (default: {}):
|
5
|
+
# :dynamic - The String indicating if new properties should be added dynamically to an existing nested object. Can be 'true', 'false', or 'strict'. Defaults to 'true'.
|
6
|
+
# :properties - The Hash of fields within the nested object, which can be of any data type, including nested.
|
7
|
+
# :include_in_parent - The Boolean indicating if all fields in the nested object are also added to the parent document as standard fields. Defaults to false.
|
8
|
+
# :include_in_root - The Boolean indicating if all fields in the nested object are also added to the root document as standard fields. Defaults to false.
|
9
|
+
#
|
10
|
+
# Examples
|
11
|
+
#
|
12
|
+
# class MyModel
|
13
|
+
# include StretchyModel
|
14
|
+
# attribute :metadata, :nested, dynamic: 'strict', include_in_parent: true
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# Returns nothing.
|
18
|
+
class Nested < Stretchy::Attributes::Type::Base
|
19
|
+
OPTIONS = [:dynamic, :properties, :include_in_parent, :include_in_root]
|
20
|
+
|
21
|
+
def type
|
22
|
+
:nested
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|