eson-dsl 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/LICENSE.md ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Florian Gilcher <florian.gilcher@asquera.de>, Felix Gilcher <felix.gilcher@asquera.de>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,179 @@
1
+ # eson-dsl: The elasticsearch query DSL, in Ruby
2
+
3
+ [![Build Status](https://secure.travis-ci.org/Asquera/eson-dsl.png?branch=master)](http://travis-ci.org/Asquera/eson-dsl)
4
+
5
+ This gem provides a full implementation of the ElasticSearch query DSL, independent of a client. At the moment, it encodes the query DSL of ElasticSearch 0.19
6
+
7
+ Features:
8
+
9
+ * Safe: it does its best to avoid generating improper queries
10
+ * Close to the original: All queries and filters have the same name an similar parameter order as in the elasticsearch documentation
11
+ * Ease of use: makes handing some of the trickier aspects of the query language easier
12
+ * Complete: Incorporates all of the elasticsearch query language
13
+
14
+ ## Usage
15
+
16
+ ``` ruby
17
+ require 'eson-dsl'
18
+ require 'json'
19
+
20
+ q = Eson::Search::BaseQuery.new do
21
+ query do
22
+ wildcard :user, :value => "kim*y", :boost => 2.0
23
+ end
24
+ filters do
25
+ range :age, :from => 10, :to => 20
26
+ end
27
+ facets do
28
+ histogram :hist1, :field => :age, :interval => 2
29
+ end
30
+ end
31
+
32
+ JSON.dump(q.to_query_hash)
33
+ ```
34
+
35
+ This example yields:
36
+
37
+ ```json
38
+ {
39
+ "query": {
40
+ "filtered": {
41
+ "query": {
42
+ "wildcard": {
43
+ "user": {
44
+ "value": "kim*y",
45
+ "boost": 2.0}
46
+ }
47
+ }
48
+ },
49
+ "filter": {
50
+ "range": {
51
+ "age": {
52
+ "from": 10,
53
+ "to": 20
54
+ }
55
+ }
56
+ }
57
+ }
58
+ },
59
+ "facets": {
60
+ "hist1": {
61
+ "histogram": {
62
+ "field": "age",
63
+ "interval": 2
64
+ }
65
+ }
66
+ }
67
+ }
68
+ ```
69
+
70
+ The query generator does its best to avoid extra work. For example, if filtering is all you want, you can omit the query part - a `filtered` query with a `match_all`-query will be generated automatically:
71
+
72
+ ```ruby
73
+ q.filter do
74
+ term "foo", :value => 'bar'
75
+ end
76
+ ```
77
+
78
+ will generate:
79
+
80
+ ```ruby
81
+ {
82
+ "query": {
83
+ "filtered": {
84
+ "query": {
85
+ "match_all": { }
86
+ },
87
+ "filter": {
88
+ "term": {
89
+ "foo": {
90
+ "value": "bar"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ ```
98
+
99
+ ## Parameters
100
+
101
+ Parameters can be passed to BaseQuery to allow generation of dynamic queries, without playing with variable visibility:
102
+
103
+ ```ruby
104
+ Eson::Search::BaseQuery.new(:search_string => "kim*y", :boost => 2.0) do
105
+ query do
106
+ wildcard :user, :value => param(:search_string), :boost => param(:boost)
107
+ end
108
+ end
109
+
110
+ ```
111
+
112
+ ## Examples
113
+
114
+ See `examples` for all examples used in the test suite.
115
+
116
+ ## Specialities
117
+
118
+ Eson supports scoped facets in an object-oriented way. To scope a facet, call `scope` on it and pass the reference to a subquery. In practice, this requires a bit of trickery in Ruby 1.9, as it local variables are not propagated outside of the introducing block:
119
+
120
+ ```ruby
121
+ Eson::Search::BaseQuery.new do
122
+ q = nil
123
+ query do
124
+ q = nested :path => :obj1, :score_mode => "avg" do
125
+ query do
126
+ match_all
127
+ end
128
+ filters do
129
+ range :age, :from => 10, :to => 20
130
+ end
131
+ end
132
+ end
133
+
134
+ facets do
135
+ (histogram :hist1, :field => :age, :interval => 2).scope(q, 'my_scope')
136
+ end
137
+ end
138
+ ```
139
+
140
+ ## Caveats
141
+
142
+ `and`, `not` and `or` are Ruby keywords and can only be used as methods of the receiver is explicit. For that reason, you need to write the following to generate `and`- and `or`-filters:
143
+
144
+ ```ruby
145
+ q.filter do |f|
146
+ f.or do
147
+ term "name.first" => "Felix"
148
+ term "name.first" => "Florian"
149
+ end
150
+ end
151
+ ```
152
+
153
+ and
154
+
155
+ ```ruby
156
+ q.filter do |f|
157
+ f.and do #and is a keyword, so it needs a receiver
158
+ range :post_date, {:from => "2010-03-01", :to => "2010-04-01"}
159
+ prefix "name.second" => "ba"
160
+ end
161
+ end
162
+ ```
163
+
164
+ Due to clever defaults, `and` can be omitted altogether:
165
+
166
+ ```ruby
167
+ q.filter do |f|
168
+ range :post_date, {:from => "2010-03-01", :to => "2010-04-01"}
169
+ prefix "name.second" => "ba"
170
+ end
171
+ ```
172
+
173
+
174
+ # TODO
175
+
176
+ * Indices-Query is missing
177
+ * Custom-Boost-Query is missing)
178
+ * More docs
179
+ * Testing on Ruby 1.8
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems' unless defined?(Gem)
2
+ require 'rubygems/specification'
3
+ require 'rake/gempackagetask'
4
+ require 'rake/testtask'
5
+
6
+ def gemspec
7
+ @gemspec ||= begin
8
+ file = File.expand_path("eson-dsl.gemspec")
9
+ ::Gem::Specification.load(file)
10
+ end
11
+ end
12
+
13
+ desc "Validates the gemspec"
14
+ task :gemspec do
15
+ gemspec.validate
16
+ end
17
+
18
+ Rake::GemPackageTask.new(gemspec) do |pkg|
19
+ pkg.gem_spec = gemspec
20
+ end
21
+
22
+ task :package => :gemspec
23
+
24
+ Rake::TestTask.new(:test) do |test|
25
+ test.pattern = 'test/**/*_test.rb'
26
+
27
+ test.verbose = true
28
+ end
29
+
30
+ task :default => :test
data/TODO.md ADDED
@@ -0,0 +1 @@
1
+ * Add missing examples (run YARD and see)
data/eson-dsl.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ #require "./lib/elsearch"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "eson-dsl"
7
+ s.version = "0.7.0"
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Florian Gilcher"]
10
+ s.email = ["florian.gilcher@asquera.de"]
11
+ s.homepage = ""
12
+ s.summary = %q{An ElasticSearch query DSL Generator}
13
+ s.description = %q{eson-dsl provides an abstraction to create ElasticSearch queries.}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ #s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency "elasticsearch-node"
21
+ end
@@ -0,0 +1,5 @@
1
+ Eson::Search::BaseQuery.new do
2
+ facets do
3
+ date_histogram :hist1, :field => :time, :interval => "day"
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ Eson::Search::BaseQuery.new do
2
+ facets do
3
+ filter :wow_facet do
4
+ term :tag => "wow"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ Eson::Search::BaseQuery.new do
2
+ facets do
3
+ geo_distance :geo1, :location do
4
+ lat(40)
5
+ lon(-70)
6
+ ranges [
7
+ { :to => 10 },
8
+ { :from => 10, :to => 20 },
9
+ { :from => 20, :to => 100 },
10
+ { :from => 100 }
11
+ ]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ Eson::Search::BaseQuery.new do
2
+ facets do
3
+ histogram :hist1, :field => :age, :interval => 100
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ Eson::Search::BaseQuery.new do
2
+ facets do
3
+ query :wow_facet do
4
+ term :tag => "wow"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ Eson::Search::BaseQuery.new do
2
+ facets do
3
+ range :range1, :age, { :to => 50 },
4
+ { :from => 20, :to => 70 },
5
+ { :from => 70, :to => 120 },
6
+ { :from => 150 }
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ Eson::Search::BaseQuery.new do
2
+ q = nil
3
+ query do
4
+ q = nested :path => :obj1, :score_mode => "avg" do
5
+ query do
6
+ match_all
7
+ end
8
+ filters do
9
+ range :age, :from => 10, :to => 20
10
+ end
11
+ end
12
+ end
13
+
14
+ facets do
15
+ (histogram :hist1, :field => :age, :interval => 2).scope(q, 'my_scope')
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ Eson::Search::BaseQuery.new do
2
+ facets do
3
+ statistical :stat1, {:field => :field1}
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ match_all
4
+ end
5
+ facets do
6
+ terms_stats :tag_price_stats, {:key_field => :tag,
7
+ :value_field => :price }
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ match_all
4
+ end
5
+ facets do
6
+ terms :tags, :field => :tags, :size => 10, :order => :term
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ term :tag => "something"
4
+ end
5
+ filter do |f|
6
+ f.and do #and is a keyword, so it needs a receiver
7
+ range :post_date, {:from => "2010-03-01", :to => "2010-04-01"}
8
+ prefix "name.second" => "ba"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ term :tag => "something"
4
+ end
5
+ filter do |f|
6
+ range :post_date, {:from => "2010-03-01", :to => "2010-04-01"}
7
+ prefix "name.second" => "ba"
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ bool do
4
+ must do
5
+ term "user" => "kimchy"
6
+ end
7
+ must_not do
8
+ range :age, :from => 10, :to => 20
9
+ end
10
+ should do
11
+ term "tag" => "wow"
12
+ term "tag" => "elasticsearch"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ constant_score do
4
+ filter do
5
+ exists :field => "user"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ constant_score do
4
+ filter do
5
+ fquery :_cache => true do
6
+ query_string "this AND that OR thus"
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ geo_bounding_box "location" do
4
+ top_left :lat => 40.73, :lon => -74.1
5
+ bottom_right :lat => 40.717, :lon => -73.99
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ geo_distance "location", :distance => "200km" do
4
+ lat(40)
5
+ lon(-70)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ geo_distance "location" do
4
+ distance "200km"
5
+ lat(40)
6
+ lon(-70)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ geo_distance_range "location" do
4
+ from "200km"
5
+ to "400km"
6
+ lat(40)
7
+ lon(-70)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ geo_polygon :location do
4
+ points [{:lat => 40, :lon => -70},
5
+ {:lat => 30, :lon => -80}]
6
+
7
+ point :lat => 20, :lon => -90
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ has_child :blog_tag do
4
+ query do
5
+ term :tag => "something"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ match_all
4
+ end
5
+ filter do
6
+ ids "user", [1,2,3,4,5,6,7]
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ constant_score do
4
+ filter do
5
+ missing :field => "user"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ term :tag => "something"
4
+ end
5
+ filter do |f|
6
+ f.not do
7
+ term "name.first" => "Florian"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ constant_score do
4
+ filter do
5
+ numeric_range :age, :from => 10, :to => 20
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ term :tag => "something"
4
+ end
5
+ filter do |f|
6
+ f.or do
7
+ term "name.first" => "Felix"
8
+ term "name.first" => "Florian"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ range :age, :from => 10, :to => 20
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ Eson::Search::BaseQuery.new do
2
+ filter do
3
+ type :my_type
4
+ end
5
+ end
@@ -0,0 +1,16 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ bool do
4
+ must do
5
+ term "user", :value => "kimchy"
6
+ end
7
+ must_not do
8
+ range :age, :from => 10, :to => 20
9
+ end
10
+ should do
11
+ term "tag", :value => "wow"
12
+ term "tag", :value => "elasticsearch"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ boosting(:negative_boost => 0.2) do
4
+ positive do
5
+ term :field1 => 1
6
+ end
7
+ negative do
8
+ term :field1 => 2
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ constant_score :boost => 2.0 do
4
+ query do
5
+ term "user", :value => "kimchy"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ constant_score :boost => 2.0 do
4
+ filter do
5
+ term "user", :value => "kimchy"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ options = {
4
+ :script => "_score * doc['my_numeric_field'].value / pow(param1, param2)",
5
+ :params => {
6
+ :param1 => 2,
7
+ :param2 => 3.1
8
+ }
9
+ }
10
+
11
+ custom_score options do
12
+ query { match_all }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ dis_max(:tie_breaker => 0.7) do
4
+ query do
5
+ term :age => 34
6
+ term :age => 35
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ field "name.first" => "+something -else"
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ match_all
4
+ end
5
+ filters do
6
+ range :age, :from => 10, :to => 20
7
+ end
8
+ facets do
9
+ histogram :hist1, :field => :age, :interval => 2
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ flt :fields => ["name.first", "name.last"],
4
+ :like_text => "text like this one",
5
+ :max_query_terms => 12
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ Eson::Search::BaseQuery.new do
2
+ query do
3
+ flt_field "name.first",
4
+ :like_text => "text like this one",
5
+ :max_query_terms => 12
6
+ end
7
+ end