eson-dsl 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.md +20 -0
- data/README.md +179 -0
- data/Rakefile +30 -0
- data/TODO.md +1 -0
- data/eson-dsl.gemspec +21 -0
- data/examples/facets/date_histogram.rb +5 -0
- data/examples/facets/filter.rb +7 -0
- data/examples/facets/geo_distance.rb +14 -0
- data/examples/facets/histogram.rb +5 -0
- data/examples/facets/query.rb +7 -0
- data/examples/facets/range.rb +8 -0
- data/examples/facets/scoped.rb +17 -0
- data/examples/facets/statistical.rb +5 -0
- data/examples/facets/term_stats.rb +9 -0
- data/examples/facets/terms.rb +8 -0
- data/examples/filters/and.rb +11 -0
- data/examples/filters/and_without_keyword.rb +9 -0
- data/examples/filters/bool.rb +16 -0
- data/examples/filters/exists.rb +9 -0
- data/examples/filters/fquery.rb +11 -0
- data/examples/filters/geo_bounding_box.rb +8 -0
- data/examples/filters/geo_distance.rb +8 -0
- data/examples/filters/geo_distance_alternate.rb +9 -0
- data/examples/filters/geo_distance_range.rb +10 -0
- data/examples/filters/geo_polygon.rb +10 -0
- data/examples/filters/has_child.rb +9 -0
- data/examples/filters/ids.rb +8 -0
- data/examples/filters/missing.rb +9 -0
- data/examples/filters/not.rb +10 -0
- data/examples/filters/numeric_range.rb +9 -0
- data/examples/filters/or.rb +11 -0
- data/examples/filters/range.rb +5 -0
- data/examples/filters/type.rb +5 -0
- data/examples/queries/bool.rb +16 -0
- data/examples/queries/boosting.rb +12 -0
- data/examples/queries/constant_score.rb +9 -0
- data/examples/queries/constant_score_with_filter.rb +9 -0
- data/examples/queries/custom_score.rb +15 -0
- data/examples/queries/dis_max.rb +10 -0
- data/examples/queries/field.rb +5 -0
- data/examples/queries/filters_and_facets.rb +11 -0
- data/examples/queries/flt.rb +7 -0
- data/examples/queries/flt_field.rb +7 -0
- data/examples/queries/fuzzy.rb +5 -0
- data/examples/queries/fuzzy_complex.rb +5 -0
- data/examples/queries/has_child.rb +9 -0
- data/examples/queries/has_child_complex.rb +12 -0
- data/examples/queries/ids.rb +5 -0
- data/examples/queries/match_all.rb +5 -0
- data/examples/queries/mlt.rb +7 -0
- data/examples/queries/mlt_field.rb +7 -0
- data/examples/queries/nested.rb +12 -0
- data/examples/queries/prefix.rb +5 -0
- data/examples/queries/prefix_short.rb +5 -0
- data/examples/queries/query_string.rb +6 -0
- data/examples/queries/query_string_with_multiple_fields.rb +7 -0
- data/examples/queries/query_string_without_default_field.rb +5 -0
- data/examples/queries/range.rb +5 -0
- data/examples/queries/span_first.rb +7 -0
- data/examples/queries/span_near.rb +11 -0
- data/examples/queries/span_not.rb +8 -0
- data/examples/queries/span_or.rb +11 -0
- data/examples/queries/span_term.rb +5 -0
- data/examples/queries/term.rb +5 -0
- data/examples/queries/term_with_parameters.rb +5 -0
- data/examples/queries/terms.rb +5 -0
- data/examples/queries/text.rb +5 -0
- data/examples/queries/top_children.rb +7 -0
- data/examples/queries/wildcard.rb +5 -0
- data/examples/queries/wildcard_short.rb +5 -0
- data/lib/eson/modules/query_plugin.rb +44 -0
- data/lib/eson/search/and.rb +27 -0
- data/lib/eson/search/base_query.rb +39 -0
- data/lib/eson/search/bool.rb +51 -0
- data/lib/eson/search/boosting.rb +45 -0
- data/lib/eson/search/constant_score.rb +21 -0
- data/lib/eson/search/custom_score.rb +19 -0
- data/lib/eson/search/date_histogram.rb +13 -0
- data/lib/eson/search/dis_max.rb +22 -0
- data/lib/eson/search/exists.rb +18 -0
- data/lib/eson/search/facet.rb +39 -0
- data/lib/eson/search/facets.rb +37 -0
- data/lib/eson/search/field.rb +16 -0
- data/lib/eson/search/field_based.rb +24 -0
- data/lib/eson/search/filter.rb +28 -0
- data/lib/eson/search/filter_facet.rb +13 -0
- data/lib/eson/search/filters.rb +69 -0
- data/lib/eson/search/fquery.rb +22 -0
- data/lib/eson/search/fuzzy.rb +29 -0
- data/lib/eson/search/fuzzy_like_this.rb +16 -0
- data/lib/eson/search/fuzzy_like_this_field.rb +20 -0
- data/lib/eson/search/geo_bounding_box.rb +35 -0
- data/lib/eson/search/geo_distance.rb +34 -0
- data/lib/eson/search/geo_distance_range.rb +29 -0
- data/lib/eson/search/geo_polygon.rb +32 -0
- data/lib/eson/search/has_child.rb +29 -0
- data/lib/eson/search/histogram.rb +20 -0
- data/lib/eson/search/ids.rb +27 -0
- data/lib/eson/search/match_all.rb +21 -0
- data/lib/eson/search/missing.rb +21 -0
- data/lib/eson/search/more_like_this.rb +16 -0
- data/lib/eson/search/more_like_this_field.rb +20 -0
- data/lib/eson/search/nested.rb +24 -0
- data/lib/eson/search/node.rb +28 -0
- data/lib/eson/search/not.rb +23 -0
- data/lib/eson/search/numeric_range.rb +20 -0
- data/lib/eson/search/or.rb +23 -0
- data/lib/eson/search/parametrized.rb +15 -0
- data/lib/eson/search/prefix.rb +22 -0
- data/lib/eson/search/queries.rb +65 -0
- data/lib/eson/search/query.rb +28 -0
- data/lib/eson/search/query_facet.rb +16 -0
- data/lib/eson/search/query_field.rb +33 -0
- data/lib/eson/search/query_group.rb +34 -0
- data/lib/eson/search/query_string.rb +20 -0
- data/lib/eson/search/range.rb +26 -0
- data/lib/eson/search/span_first.rb +27 -0
- data/lib/eson/search/span_near.rb +29 -0
- data/lib/eson/search/span_not.rb +29 -0
- data/lib/eson/search/span_or.rb +29 -0
- data/lib/eson/search/span_term.rb +18 -0
- data/lib/eson/search/statistical.rb +20 -0
- data/lib/eson/search/sub_query.rb +7 -0
- data/lib/eson/search/term.rb +22 -0
- data/lib/eson/search/terms.rb +22 -0
- data/lib/eson/search/terms_stats.rb +20 -0
- data/lib/eson/search/text.rb +23 -0
- data/lib/eson/search/top_children.rb +28 -0
- data/lib/eson/search/type.rb +20 -0
- data/lib/eson/search/wildcard.rb +18 -0
- data/lib/eson-dsl.rb +64 -0
- data/log4j.properties +18 -0
- data/test/search/facet_test.rb +92 -0
- data/test/search/facets/date_histogram.documents +1 -0
- data/test/search/facets/date_histogram.mapping +1 -0
- data/test/search/facets/date_histogram.rb +13 -0
- data/test/search/facets/geo_distance.documents +1 -0
- data/test/search/facets/geo_distance.mapping +8 -0
- data/test/search/facets/geo_distance.rb +1 -0
- data/test/search/facets/histogram.documents +1 -0
- data/test/search/facets/histogram.rb +13 -0
- data/test/search/facets/query.documents +1 -0
- data/test/search/facets/query.rb +14 -0
- data/test/search/facets/range.documents +1 -0
- data/test/search/facets/range.rb +17 -0
- data/test/search/facets/scoped.documents +1 -0
- data/test/search/facets/scoped.json +1 -0
- data/test/search/facets/scoped.mapping +9 -0
- data/test/search/facets/statistical.documents +1 -0
- data/test/search/facets/statistical.rb +12 -0
- data/test/search/facets/tag_facet.documents +1 -0
- data/test/search/facets/tag_facet.rb +14 -0
- data/test/search/facets/terms.rb +14 -0
- data/test/search/facets/terms_stats.documents +1 -0
- data/test/search/facets/terms_stats.json +1 -0
- data/test/search/facets/terms_stats.rb +13 -0
- data/test/search/filters/and.rb +15 -0
- data/test/search/filters/bool.json +1 -0
- data/test/search/filters/bool.rb +27 -0
- data/test/search/filters/exists.json +1 -0
- data/test/search/filters/exists.rb +1 -0
- data/test/search/filters/filter_query.rb +14 -0
- data/test/search/filters/geo_bounding_box_hash.documents +1 -0
- data/test/search/filters/geo_bounding_box_hash.json +1 -0
- data/test/search/filters/geo_bounding_box_hash.mapping +8 -0
- data/test/search/filters/geo_distance_hash.documents +1 -0
- data/test/search/filters/geo_distance_hash.json +1 -0
- data/test/search/filters/geo_distance_hash.mapping +8 -0
- data/test/search/filters/geo_distance_range_hash.documents +1 -0
- data/test/search/filters/geo_distance_range_hash.json +1 -0
- data/test/search/filters/geo_distance_range_hash.mapping +8 -0
- data/test/search/filters/geo_polygon_hash.documents +1 -0
- data/test/search/filters/geo_polygon_hash.json +1 -0
- data/test/search/filters/geo_polygon_hash.mapping +8 -0
- data/test/search/filters/has_child.blog.mapping +1 -0
- data/test/search/filters/has_child.blog_tag.mapping +1 -0
- data/test/search/filters/has_child.rb +15 -0
- data/test/search/filters/ids.rb +14 -0
- data/test/search/filters/missing.rb +1 -0
- data/test/search/filters/not.rb +16 -0
- data/test/search/filters/numeric_range.documents +1 -0
- data/test/search/filters/numeric_range.rb +1 -0
- data/test/search/filters/or.rb +15 -0
- data/test/search/filters/range.rb +16 -0
- data/test/search/filters/type.json +1 -0
- data/test/search/filters/type.rb +1 -0
- data/test/search/filters_test.rb +166 -0
- data/test/search/queries/bool.json +1 -0
- data/test/search/queries/bool.rb +21 -0
- data/test/search/queries/boosting.json +1 -0
- data/test/search/queries/boosting.rb +17 -0
- data/test/search/queries/constant_score.rb +10 -0
- data/test/search/queries/constant_score_filter.rb +10 -0
- data/test/search/queries/custom_score.documents +1 -0
- data/test/search/queries/custom_score.rb +14 -0
- data/test/search/queries/dis_max.rb +15 -0
- data/test/search/queries/field.rb +7 -0
- data/test/search/queries/filters_and_facets.documents +1 -0
- data/test/search/queries/filters_and_facets.json +1 -0
- data/test/search/queries/flt.rb +9 -0
- data/test/search/queries/flt_field.rb +10 -0
- data/test/search/queries/fuzzy_complex.rb +5 -0
- data/test/search/queries/fuzzy_simple.rb +5 -0
- data/test/search/queries/has_child.blog.mapping +1 -0
- data/test/search/queries/has_child.blog_tag.mapping +1 -0
- data/test/search/queries/has_child.rb +10 -0
- data/test/search/queries/has_child_complex.blog.mapping +1 -0
- data/test/search/queries/has_child_complex.blog_tag.mapping +1 -0
- data/test/search/queries/has_child_complex.rb +17 -0
- data/test/search/queries/ids.rb +1 -0
- data/test/search/queries/match_all.rb +1 -0
- data/test/search/queries/mlt.json +1 -0
- data/test/search/queries/mlt.rb +9 -0
- data/test/search/queries/mlt_field.rb +10 -0
- data/test/search/queries/nested.json +1 -0
- data/test/search/queries/nested.mapping +9 -0
- data/test/search/queries/phrase_prefix.rb +8 -0
- data/test/search/queries/prefix.rb +1 -0
- data/test/search/queries/prefix_short.rb +1 -0
- data/test/search/queries/query_string.rb +8 -0
- data/test/search/queries/query_string_with_multiple_fields.rb +9 -0
- data/test/search/queries/query_string_without_default_field.rb +7 -0
- data/test/search/queries/range.rb +11 -0
- data/test/search/queries/span_near.json +1 -0
- data/test/search/queries/span_not.json +1 -0
- data/test/search/queries/span_or.json +1 -0
- data/test/search/queries/span_term.json +1 -0
- data/test/search/queries/term.json +1 -0
- data/test/search/queries/term.rb +1 -0
- data/test/search/queries/terms.rb +1 -0
- data/test/search/queries/text.json +1 -0
- data/test/search/queries/text.rb +8 -0
- data/test/search/queries/top_children.blog.mapping +1 -0
- data/test/search/queries/top_children.blog_tag.mapping +1 -0
- data/test/search/queries/top_children.rb +11 -0
- data/test/search/queries/wildcard.rb +1 -0
- data/test/search/queries/wildcard_short.rb +1 -0
- data/test/search/query_test.rb +311 -0
- data/test/test_config.rb +157 -0
- 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,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,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,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,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
|