eson-dsl 0.7.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.
Files changed (240) hide show
  1. data/LICENSE.md +20 -0
  2. data/README.md +179 -0
  3. data/Rakefile +30 -0
  4. data/TODO.md +1 -0
  5. data/eson-dsl.gemspec +21 -0
  6. data/examples/facets/date_histogram.rb +5 -0
  7. data/examples/facets/filter.rb +7 -0
  8. data/examples/facets/geo_distance.rb +14 -0
  9. data/examples/facets/histogram.rb +5 -0
  10. data/examples/facets/query.rb +7 -0
  11. data/examples/facets/range.rb +8 -0
  12. data/examples/facets/scoped.rb +17 -0
  13. data/examples/facets/statistical.rb +5 -0
  14. data/examples/facets/term_stats.rb +9 -0
  15. data/examples/facets/terms.rb +8 -0
  16. data/examples/filters/and.rb +11 -0
  17. data/examples/filters/and_without_keyword.rb +9 -0
  18. data/examples/filters/bool.rb +16 -0
  19. data/examples/filters/exists.rb +9 -0
  20. data/examples/filters/fquery.rb +11 -0
  21. data/examples/filters/geo_bounding_box.rb +8 -0
  22. data/examples/filters/geo_distance.rb +8 -0
  23. data/examples/filters/geo_distance_alternate.rb +9 -0
  24. data/examples/filters/geo_distance_range.rb +10 -0
  25. data/examples/filters/geo_polygon.rb +10 -0
  26. data/examples/filters/has_child.rb +9 -0
  27. data/examples/filters/ids.rb +8 -0
  28. data/examples/filters/missing.rb +9 -0
  29. data/examples/filters/not.rb +10 -0
  30. data/examples/filters/numeric_range.rb +9 -0
  31. data/examples/filters/or.rb +11 -0
  32. data/examples/filters/range.rb +5 -0
  33. data/examples/filters/type.rb +5 -0
  34. data/examples/queries/bool.rb +16 -0
  35. data/examples/queries/boosting.rb +12 -0
  36. data/examples/queries/constant_score.rb +9 -0
  37. data/examples/queries/constant_score_with_filter.rb +9 -0
  38. data/examples/queries/custom_score.rb +15 -0
  39. data/examples/queries/dis_max.rb +10 -0
  40. data/examples/queries/field.rb +5 -0
  41. data/examples/queries/filters_and_facets.rb +11 -0
  42. data/examples/queries/flt.rb +7 -0
  43. data/examples/queries/flt_field.rb +7 -0
  44. data/examples/queries/fuzzy.rb +5 -0
  45. data/examples/queries/fuzzy_complex.rb +5 -0
  46. data/examples/queries/has_child.rb +9 -0
  47. data/examples/queries/has_child_complex.rb +12 -0
  48. data/examples/queries/ids.rb +5 -0
  49. data/examples/queries/match_all.rb +5 -0
  50. data/examples/queries/mlt.rb +7 -0
  51. data/examples/queries/mlt_field.rb +7 -0
  52. data/examples/queries/nested.rb +12 -0
  53. data/examples/queries/prefix.rb +5 -0
  54. data/examples/queries/prefix_short.rb +5 -0
  55. data/examples/queries/query_string.rb +6 -0
  56. data/examples/queries/query_string_with_multiple_fields.rb +7 -0
  57. data/examples/queries/query_string_without_default_field.rb +5 -0
  58. data/examples/queries/range.rb +5 -0
  59. data/examples/queries/span_first.rb +7 -0
  60. data/examples/queries/span_near.rb +11 -0
  61. data/examples/queries/span_not.rb +8 -0
  62. data/examples/queries/span_or.rb +11 -0
  63. data/examples/queries/span_term.rb +5 -0
  64. data/examples/queries/term.rb +5 -0
  65. data/examples/queries/term_with_parameters.rb +5 -0
  66. data/examples/queries/terms.rb +5 -0
  67. data/examples/queries/text.rb +5 -0
  68. data/examples/queries/top_children.rb +7 -0
  69. data/examples/queries/wildcard.rb +5 -0
  70. data/examples/queries/wildcard_short.rb +5 -0
  71. data/lib/eson/modules/query_plugin.rb +44 -0
  72. data/lib/eson/search/and.rb +27 -0
  73. data/lib/eson/search/base_query.rb +39 -0
  74. data/lib/eson/search/bool.rb +51 -0
  75. data/lib/eson/search/boosting.rb +45 -0
  76. data/lib/eson/search/constant_score.rb +21 -0
  77. data/lib/eson/search/custom_score.rb +19 -0
  78. data/lib/eson/search/date_histogram.rb +13 -0
  79. data/lib/eson/search/dis_max.rb +22 -0
  80. data/lib/eson/search/exists.rb +18 -0
  81. data/lib/eson/search/facet.rb +39 -0
  82. data/lib/eson/search/facets.rb +37 -0
  83. data/lib/eson/search/field.rb +16 -0
  84. data/lib/eson/search/field_based.rb +24 -0
  85. data/lib/eson/search/filter.rb +28 -0
  86. data/lib/eson/search/filter_facet.rb +13 -0
  87. data/lib/eson/search/filters.rb +69 -0
  88. data/lib/eson/search/fquery.rb +22 -0
  89. data/lib/eson/search/fuzzy.rb +29 -0
  90. data/lib/eson/search/fuzzy_like_this.rb +16 -0
  91. data/lib/eson/search/fuzzy_like_this_field.rb +20 -0
  92. data/lib/eson/search/geo_bounding_box.rb +35 -0
  93. data/lib/eson/search/geo_distance.rb +34 -0
  94. data/lib/eson/search/geo_distance_range.rb +29 -0
  95. data/lib/eson/search/geo_polygon.rb +32 -0
  96. data/lib/eson/search/has_child.rb +29 -0
  97. data/lib/eson/search/histogram.rb +20 -0
  98. data/lib/eson/search/ids.rb +27 -0
  99. data/lib/eson/search/match_all.rb +21 -0
  100. data/lib/eson/search/missing.rb +21 -0
  101. data/lib/eson/search/more_like_this.rb +16 -0
  102. data/lib/eson/search/more_like_this_field.rb +20 -0
  103. data/lib/eson/search/nested.rb +24 -0
  104. data/lib/eson/search/node.rb +28 -0
  105. data/lib/eson/search/not.rb +23 -0
  106. data/lib/eson/search/numeric_range.rb +20 -0
  107. data/lib/eson/search/or.rb +23 -0
  108. data/lib/eson/search/parametrized.rb +15 -0
  109. data/lib/eson/search/prefix.rb +22 -0
  110. data/lib/eson/search/queries.rb +65 -0
  111. data/lib/eson/search/query.rb +28 -0
  112. data/lib/eson/search/query_facet.rb +16 -0
  113. data/lib/eson/search/query_field.rb +33 -0
  114. data/lib/eson/search/query_group.rb +34 -0
  115. data/lib/eson/search/query_string.rb +20 -0
  116. data/lib/eson/search/range.rb +26 -0
  117. data/lib/eson/search/span_first.rb +27 -0
  118. data/lib/eson/search/span_near.rb +29 -0
  119. data/lib/eson/search/span_not.rb +29 -0
  120. data/lib/eson/search/span_or.rb +29 -0
  121. data/lib/eson/search/span_term.rb +18 -0
  122. data/lib/eson/search/statistical.rb +20 -0
  123. data/lib/eson/search/sub_query.rb +7 -0
  124. data/lib/eson/search/term.rb +22 -0
  125. data/lib/eson/search/terms.rb +22 -0
  126. data/lib/eson/search/terms_stats.rb +20 -0
  127. data/lib/eson/search/text.rb +23 -0
  128. data/lib/eson/search/top_children.rb +28 -0
  129. data/lib/eson/search/type.rb +20 -0
  130. data/lib/eson/search/wildcard.rb +18 -0
  131. data/lib/eson-dsl.rb +64 -0
  132. data/log4j.properties +18 -0
  133. data/test/search/facet_test.rb +92 -0
  134. data/test/search/facets/date_histogram.documents +1 -0
  135. data/test/search/facets/date_histogram.mapping +1 -0
  136. data/test/search/facets/date_histogram.rb +13 -0
  137. data/test/search/facets/geo_distance.documents +1 -0
  138. data/test/search/facets/geo_distance.mapping +8 -0
  139. data/test/search/facets/geo_distance.rb +1 -0
  140. data/test/search/facets/histogram.documents +1 -0
  141. data/test/search/facets/histogram.rb +13 -0
  142. data/test/search/facets/query.documents +1 -0
  143. data/test/search/facets/query.rb +14 -0
  144. data/test/search/facets/range.documents +1 -0
  145. data/test/search/facets/range.rb +17 -0
  146. data/test/search/facets/scoped.documents +1 -0
  147. data/test/search/facets/scoped.json +1 -0
  148. data/test/search/facets/scoped.mapping +9 -0
  149. data/test/search/facets/statistical.documents +1 -0
  150. data/test/search/facets/statistical.rb +12 -0
  151. data/test/search/facets/tag_facet.documents +1 -0
  152. data/test/search/facets/tag_facet.rb +14 -0
  153. data/test/search/facets/terms.rb +14 -0
  154. data/test/search/facets/terms_stats.documents +1 -0
  155. data/test/search/facets/terms_stats.json +1 -0
  156. data/test/search/facets/terms_stats.rb +13 -0
  157. data/test/search/filters/and.rb +15 -0
  158. data/test/search/filters/bool.json +1 -0
  159. data/test/search/filters/bool.rb +27 -0
  160. data/test/search/filters/exists.json +1 -0
  161. data/test/search/filters/exists.rb +1 -0
  162. data/test/search/filters/filter_query.rb +14 -0
  163. data/test/search/filters/geo_bounding_box_hash.documents +1 -0
  164. data/test/search/filters/geo_bounding_box_hash.json +1 -0
  165. data/test/search/filters/geo_bounding_box_hash.mapping +8 -0
  166. data/test/search/filters/geo_distance_hash.documents +1 -0
  167. data/test/search/filters/geo_distance_hash.json +1 -0
  168. data/test/search/filters/geo_distance_hash.mapping +8 -0
  169. data/test/search/filters/geo_distance_range_hash.documents +1 -0
  170. data/test/search/filters/geo_distance_range_hash.json +1 -0
  171. data/test/search/filters/geo_distance_range_hash.mapping +8 -0
  172. data/test/search/filters/geo_polygon_hash.documents +1 -0
  173. data/test/search/filters/geo_polygon_hash.json +1 -0
  174. data/test/search/filters/geo_polygon_hash.mapping +8 -0
  175. data/test/search/filters/has_child.blog.mapping +1 -0
  176. data/test/search/filters/has_child.blog_tag.mapping +1 -0
  177. data/test/search/filters/has_child.rb +15 -0
  178. data/test/search/filters/ids.rb +14 -0
  179. data/test/search/filters/missing.rb +1 -0
  180. data/test/search/filters/not.rb +16 -0
  181. data/test/search/filters/numeric_range.documents +1 -0
  182. data/test/search/filters/numeric_range.rb +1 -0
  183. data/test/search/filters/or.rb +15 -0
  184. data/test/search/filters/range.rb +16 -0
  185. data/test/search/filters/type.json +1 -0
  186. data/test/search/filters/type.rb +1 -0
  187. data/test/search/filters_test.rb +166 -0
  188. data/test/search/queries/bool.json +1 -0
  189. data/test/search/queries/bool.rb +21 -0
  190. data/test/search/queries/boosting.json +1 -0
  191. data/test/search/queries/boosting.rb +17 -0
  192. data/test/search/queries/constant_score.rb +10 -0
  193. data/test/search/queries/constant_score_filter.rb +10 -0
  194. data/test/search/queries/custom_score.documents +1 -0
  195. data/test/search/queries/custom_score.rb +14 -0
  196. data/test/search/queries/dis_max.rb +15 -0
  197. data/test/search/queries/field.rb +7 -0
  198. data/test/search/queries/filters_and_facets.documents +1 -0
  199. data/test/search/queries/filters_and_facets.json +1 -0
  200. data/test/search/queries/flt.rb +9 -0
  201. data/test/search/queries/flt_field.rb +10 -0
  202. data/test/search/queries/fuzzy_complex.rb +5 -0
  203. data/test/search/queries/fuzzy_simple.rb +5 -0
  204. data/test/search/queries/has_child.blog.mapping +1 -0
  205. data/test/search/queries/has_child.blog_tag.mapping +1 -0
  206. data/test/search/queries/has_child.rb +10 -0
  207. data/test/search/queries/has_child_complex.blog.mapping +1 -0
  208. data/test/search/queries/has_child_complex.blog_tag.mapping +1 -0
  209. data/test/search/queries/has_child_complex.rb +17 -0
  210. data/test/search/queries/ids.rb +1 -0
  211. data/test/search/queries/match_all.rb +1 -0
  212. data/test/search/queries/mlt.json +1 -0
  213. data/test/search/queries/mlt.rb +9 -0
  214. data/test/search/queries/mlt_field.rb +10 -0
  215. data/test/search/queries/nested.json +1 -0
  216. data/test/search/queries/nested.mapping +9 -0
  217. data/test/search/queries/phrase_prefix.rb +8 -0
  218. data/test/search/queries/prefix.rb +1 -0
  219. data/test/search/queries/prefix_short.rb +1 -0
  220. data/test/search/queries/query_string.rb +8 -0
  221. data/test/search/queries/query_string_with_multiple_fields.rb +9 -0
  222. data/test/search/queries/query_string_without_default_field.rb +7 -0
  223. data/test/search/queries/range.rb +11 -0
  224. data/test/search/queries/span_near.json +1 -0
  225. data/test/search/queries/span_not.json +1 -0
  226. data/test/search/queries/span_or.json +1 -0
  227. data/test/search/queries/span_term.json +1 -0
  228. data/test/search/queries/term.json +1 -0
  229. data/test/search/queries/term.rb +1 -0
  230. data/test/search/queries/terms.rb +1 -0
  231. data/test/search/queries/text.json +1 -0
  232. data/test/search/queries/text.rb +8 -0
  233. data/test/search/queries/top_children.blog.mapping +1 -0
  234. data/test/search/queries/top_children.blog_tag.mapping +1 -0
  235. data/test/search/queries/top_children.rb +11 -0
  236. data/test/search/queries/wildcard.rb +1 -0
  237. data/test/search/queries/wildcard_short.rb +1 -0
  238. data/test/search/query_test.rb +311 -0
  239. data/test/test_config.rb +157 -0
  240. metadata +413 -0
@@ -0,0 +1,65 @@
1
+ module Eson
2
+ module Search
3
+ module Queries
4
+ module QueryMethods
5
+
6
+ end
7
+
8
+ class QueriesArray < Array
9
+ include QueryMethods
10
+ include Parametrized
11
+
12
+ def queries
13
+ self
14
+ end
15
+
16
+ def initialize(args)
17
+ self.args = args
18
+ instance_exec(self, &Proc.new) if block_given?
19
+ end
20
+
21
+ def to_query_hash
22
+ if length == 1
23
+ first.to_query_hash
24
+ else
25
+ map(&:to_query_hash)
26
+ end
27
+ end
28
+ end
29
+
30
+ attr_accessor :queries
31
+
32
+ def self.register(name, klass)
33
+ QueryMethods.__send__(:define_method, name) do |*args, &block|
34
+ o = klass.new(*args)
35
+ o.context = :query
36
+ o.args = self.args
37
+ o.instance_exec(o, &block) if block
38
+ queries << o
39
+ o
40
+ end
41
+ end
42
+
43
+ def queries(&block)
44
+ @queries ||= QueriesArray.new(args, &block)
45
+ end
46
+ alias :query :queries
47
+
48
+ def queries?
49
+ @queries && !(@queries.empty?)
50
+ end
51
+
52
+ def to_query_hash
53
+ others = super if defined?(super)
54
+
55
+ if queries?
56
+ { :query => queries.to_query_hash }.tap do |h|
57
+ h.merge!(others) if others
58
+ end
59
+ else
60
+ others
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,28 @@
1
+ module Eson
2
+ module Search
3
+ module Query
4
+ module ClassMethods
5
+ def short_name(name)
6
+ define_method :name do
7
+ name
8
+ end
9
+ Queries.register name, self
10
+
11
+ super if defined? super
12
+ end
13
+ end
14
+
15
+ def self.included(base)
16
+ base.class_eval do
17
+ extend ClassMethods
18
+ include Node unless base.kind_of? Node
19
+ end
20
+ end
21
+
22
+ def method_missing(name, arg)
23
+ warn("#{name} called as a query option")
24
+ self.options[name] = arg
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ module Eson
2
+ module Search
3
+ class QueryFacet
4
+ include Facet
5
+ include Queries
6
+ include QueryMethods
7
+
8
+ # @macro eson.facet
9
+ short_name :query
10
+
11
+ def to_query_hash
12
+ {:query => queries.to_query_hash}
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,33 @@
1
+ require 'ostruct'
2
+
3
+ module Eson
4
+ module Search
5
+ class QueryField < OpenStruct
6
+ def initialize(name, *fields)
7
+ @_name = name
8
+
9
+ if fields.length == 1 && Hash === fields.first
10
+ super(fields.first)
11
+ else
12
+ @list = fields
13
+ end
14
+ end
15
+
16
+ def to_query_hash
17
+ if @list
18
+ { _name => @list }
19
+ else
20
+ { _name => @table }
21
+ end
22
+ end
23
+
24
+ def _name
25
+ @_name
26
+ end
27
+
28
+ def _options
29
+ @_table
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,34 @@
1
+ module Eson
2
+ module Search
3
+ module QueryGroup
4
+ include Filters
5
+ include Queries
6
+ include Parametrized
7
+
8
+ def to_query_hash
9
+ if queries && filters && queries.any? && filters.any?
10
+ hash = {
11
+ :filtered => {
12
+ :query => queries.to_query_hash,
13
+ :filter => filters.to_query_hash
14
+ }
15
+ }
16
+ else
17
+ if filters && filters.any?
18
+ hash = filters.to_query_hash
19
+ end
20
+
21
+ if queries && queries.any?
22
+ hash = queries.to_query_hash
23
+ end
24
+ end
25
+
26
+ hash
27
+ end
28
+
29
+ def to_hash
30
+ to_query_hash
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ module Eson
2
+ module Search
3
+ class QueryString
4
+ include Query
5
+
6
+ # @macro eson.query
7
+ short_name :query_string
8
+
9
+ attr_accessor :options
10
+
11
+ def initialize(options = {})
12
+ if Hash === options
13
+ self.options = options
14
+ else
15
+ self.options = {:query => options.to_s }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ module Eson
2
+ module Search
3
+ class Range
4
+ include Query
5
+ include Filter
6
+ include Facet
7
+
8
+ # @macro range
9
+ # Generates a `$1` filter, facet or query, depending on context.
10
+ # {include:file:eson-dsl/examples/filters/$1.rb}
11
+ # {include:file:eson-dsl/examples/facet/$1.rb}
12
+ # {include:file:eson-dsl/examples/queries/$1.rb}
13
+ short_name :range
14
+
15
+ attr_accessor :field
16
+
17
+ def initialize(field, *options)
18
+ self.field = QueryField.new(field, *options)
19
+ end
20
+
21
+ def to_query_hash
22
+ {name => field.to_query_hash}
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ module Eson
2
+ module Search
3
+ class SpanFirst
4
+ include Query
5
+ include Queries
6
+ include QueryMethods
7
+
8
+ # @macro eson.query
9
+ short_name :span_first
10
+
11
+ attr_accessor :options
12
+
13
+ def initialize(options = {})
14
+ self.options = options
15
+ end
16
+
17
+ def to_query_hash
18
+ result = {}
19
+
20
+ result[:match] = queries.to_query_hash
21
+
22
+ {name => result.merge(options)}
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ module Eson
2
+ module Search
3
+ class SpanNear
4
+ include Query
5
+
6
+ # @macro eson.query
7
+ short_name :span_near
8
+
9
+ attr_accessor :options
10
+
11
+ def initialize(options = {})
12
+ self.options = options
13
+ end
14
+
15
+ def clauses(&block)
16
+ @clauses ||= SubQuery.new(args)
17
+ @clauses.send(context, &block)
18
+ end
19
+
20
+ def to_query_hash
21
+ result = {}
22
+
23
+ result[:clauses] = @clauses.to_query_hash
24
+
25
+ {name => result.merge(options)}
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Eson
2
+ module Search
3
+ class SpanNot
4
+ include Query
5
+
6
+ # @macro eson.query
7
+ short_name :span_not
8
+
9
+ def include(&block)
10
+ @include ||= SubQuery.new(args)
11
+ @include.send(context, &block)
12
+ end
13
+
14
+ def exclude(&block)
15
+ @exclude ||= SubQuery.new(args)
16
+ @exclude.send(context, &block)
17
+ end
18
+
19
+ def to_query_hash
20
+ result = {}
21
+
22
+ result[:include] = @include.to_query_hash
23
+ result[:exclude] = @exclude.to_query_hash
24
+
25
+ {name => result}
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Eson
2
+ module Search
3
+ class SpanOr
4
+ include Query
5
+
6
+ # @macro eson.query
7
+ short_name :span_or
8
+
9
+ attr_accessor :options
10
+
11
+ def initialize(options = {})
12
+ self.options = options
13
+ end
14
+
15
+ def clauses(&block)
16
+ @clauses ||= SubQuery.new(args)
17
+ @clauses.send(context, &block)
18
+ end
19
+
20
+ def to_query_hash
21
+ result = {}
22
+
23
+ result[:clauses] = @clauses.to_query_hash
24
+
25
+ {name => result.merge(options)}
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ module Eson
2
+ module Search
3
+ class SpanTerm < FieldBased
4
+ include Query
5
+
6
+ # @macro eson.query
7
+ short_name :span_term
8
+
9
+ def to_query_hash
10
+ if field
11
+ {name => field.to_query_hash}
12
+ else
13
+ {name => options}
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ module Eson
2
+ module Search
3
+ class Statistical
4
+ include Facet
5
+
6
+ # @macro eson.facet
7
+ short_name :statistical
8
+
9
+ attr_accessor :options
10
+
11
+ def initialize(options)
12
+ self.options = options
13
+ end
14
+
15
+ def to_query_hash
16
+ {name => options}
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ module Eson
2
+ module Search
3
+ class SubQuery
4
+ include QueryGroup
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ module Eson
2
+ module Search
3
+ class Term < FieldBased
4
+ include Query
5
+ include Filter
6
+
7
+ # @macro term
8
+ # Generates a `$1` filter, query, depending on context.
9
+ # {include:file:eson-dsl/examples/filters/$1.rb}
10
+ # {include:file:eson-dsl/examples/queries/$1.rb}
11
+ short_name :term
12
+
13
+ def to_query_hash
14
+ if field
15
+ {name => field.to_query_hash}
16
+ else
17
+ {name => options}
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Eson
2
+ module Search
3
+ class Terms
4
+ include Query
5
+ include Filter
6
+ include Facet
7
+
8
+ # @macro terms
9
+ # Generates a `$1` filter, facet or query, depending on context.
10
+ # {include:file:eson-dsl/examples/filters/$1.rb}
11
+ # {include:file:eson-dsl/examples/facet/$1.rb}
12
+ # {include:file:eson-dsl/examples/queries/$1.rb}
13
+ short_name :terms
14
+
15
+ attr_accessor :options, :field
16
+
17
+ def initialize(options = {})
18
+ self.options = options
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module Eson
2
+ module Search
3
+ class TermsStats
4
+ include Facet
5
+
6
+ # @macro eson.facet
7
+ short_name :terms_stats
8
+
9
+ attr_accessor :options
10
+
11
+ def initialize(options)
12
+ self.options = options
13
+ end
14
+
15
+ def to_query_hash
16
+ {name => options}
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ module Eson
2
+ module Search
3
+ class Text
4
+ #TODO: implement alternative forms like:
5
+ # {
6
+ # "text_phrase" : {
7
+ # "message" : "this is a test"
8
+ # }
9
+ #}
10
+ include Query
11
+
12
+ # @macro eson.query
13
+ short_name :text
14
+
15
+ attr_accessor :options
16
+
17
+ def initialize(options = {})
18
+ self.options = options
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module Eson
2
+ module Search
3
+ class TopChildren
4
+ include Query
5
+ include Filter
6
+ include QueryGroup
7
+
8
+ # @macro top_children
9
+ # Generates a `$1` filter, query, depending on context.
10
+ # {include:file:eson-dsl/examples/filters/$1.rb}
11
+ # {include:file:eson-dsl/examples/queries/$1.rb}# @macro eson.query
12
+ short_name :top_children
13
+
14
+ attr_accessor :options
15
+
16
+ def initialize(type, options = {})
17
+ self.options = options.merge(:type => type)
18
+ end
19
+
20
+ def to_query_hash
21
+ {
22
+ name => {:query => super}.merge(options)
23
+ }
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ module Eson
2
+ module Search
3
+ class Type
4
+ include Filter
5
+
6
+ # @macro eson.filter
7
+ short_name :type
8
+
9
+ attr_accessor :type
10
+
11
+ def initialize(type)
12
+ self.type = type
13
+ end
14
+
15
+ def to_query_hash
16
+ {:type => {:value => type}}
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ module Eson
2
+ module Search
3
+ class Wildcard < FieldBased
4
+ include Query
5
+
6
+ # @macro eson.query
7
+ short_name :wildcard
8
+
9
+ def to_query_hash
10
+ if field
11
+ {name => field.to_query_hash}
12
+ else
13
+ {name => options}
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
data/lib/eson-dsl.rb ADDED
@@ -0,0 +1,64 @@
1
+ require 'multi_json'
2
+
3
+ require 'eson/modules/query_plugin'
4
+
5
+ require 'eson/search/parametrized'
6
+ require 'eson/search/node'
7
+ require 'eson/search/query'
8
+ require 'eson/search/queries'
9
+ require 'eson/search/filter'
10
+ require 'eson/search/filters'
11
+ require 'eson/search/facet'
12
+ require 'eson/search/facets'
13
+ require 'eson/search/query_group'
14
+ require 'eson/search/field_based'
15
+
16
+ require 'eson/search/base_query'
17
+ require 'eson/search/sub_query'
18
+ require 'eson/search/bool'
19
+ require 'eson/search/query_field'
20
+ require 'eson/search/term'
21
+ require 'eson/search/wildcard'
22
+ require 'eson/search/terms'
23
+ require 'eson/search/ids'
24
+ require 'eson/search/match_all'
25
+ require 'eson/search/range'
26
+ require 'eson/search/constant_score'
27
+ require 'eson/search/custom_score'
28
+ require 'eson/search/text'
29
+ require 'eson/search/boosting'
30
+ require 'eson/search/dis_max'
31
+ require 'eson/search/field'
32
+ require 'eson/search/fuzzy_like_this'
33
+ require 'eson/search/fuzzy_like_this_field'
34
+ require 'eson/search/more_like_this'
35
+ require 'eson/search/more_like_this_field'
36
+ require 'eson/search/fuzzy'
37
+ require 'eson/search/has_child'
38
+ require 'eson/search/top_children'
39
+ require 'eson/search/prefix'
40
+ require 'eson/search/query_string'
41
+ require 'eson/search/and'
42
+ require 'eson/search/or'
43
+ require 'eson/search/not'
44
+ require 'eson/search/numeric_range'
45
+ require 'eson/search/missing'
46
+ require 'eson/search/exists'
47
+ require 'eson/search/type'
48
+ require 'eson/search/fquery'
49
+ require 'eson/search/histogram'
50
+ require 'eson/search/date_histogram'
51
+ require 'eson/search/query_facet'
52
+ require 'eson/search/filter_facet'
53
+ require 'eson/search/statistical'
54
+ require 'eson/search/terms_stats'
55
+ require 'eson/search/nested'
56
+ require 'eson/search/span_term'
57
+ require 'eson/search/span_or'
58
+ require 'eson/search/span_near'
59
+ require 'eson/search/span_not'
60
+ require 'eson/search/span_first'
61
+ require 'eson/search/geo_bounding_box'
62
+ require 'eson/search/geo_distance'
63
+ require 'eson/search/geo_distance_range'
64
+ require 'eson/search/geo_polygon'
data/log4j.properties ADDED
@@ -0,0 +1,18 @@
1
+ log4j.rootLogger=INFO, out
2
+ log4j.logger.jgroups=WARN
3
+
4
+ #log4j.logger.discovery=TRACE
5
+ #log4j.logger.cluster=TRACE
6
+ #log4j.logger.indices.cluster=DEBUG
7
+ #log4j.logger.index=TRACE
8
+ #log4j.logger.index.engine=DEBUG
9
+ #log4j.logger.index.shard=TRACE
10
+ #log4j.logger.index.cache=DEBUG
11
+ #log4j.logger.http=TRACE
12
+ #log4j.logger.monitor.jvm=DEBUG
13
+ #log4j.logger.cluster.action.shard=TRACE
14
+ #log4j.logger.index.gateway=TRACE
15
+
16
+ log4j.appender.out=org.apache.log4j.ConsoleAppender
17
+ log4j.appender.out.layout=org.apache.log4j.PatternLayout
18
+ log4j.appender.out.layout.ConversionPattern=[%d{ABSOLUTE}][%-5p][%-25c] %m%n