oedipus 0.0.3 → 0.0.4
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.
- data/README.md +1 -1
- data/lib/oedipus/index.rb +38 -23
- data/lib/oedipus/version.rb +1 -1
- data/spec/integration/index_spec.rb +51 -51
- metadata +8 -8
data/README.md
CHANGED
@@ -251,7 +251,7 @@ it does two optimizations, though in future this will likely improve further, so
|
|
251
251
|
using this technique to do your faceted searches is a good idea.
|
252
252
|
|
253
253
|
``` ruby
|
254
|
-
results = sphinx[:articles].
|
254
|
+
results = sphinx[:articles].search(
|
255
255
|
"badgers",
|
256
256
|
facets: {
|
257
257
|
popular: { views: 100..10000 },
|
data/lib/oedipus/index.rb
CHANGED
@@ -117,26 +117,12 @@ module Oedipus
|
|
117
117
|
# @example Attribute search only
|
118
118
|
# index.search(author_id: 57)
|
119
119
|
#
|
120
|
-
#
|
121
|
-
#
|
122
|
-
#
|
123
|
-
# @param [Hash] filters
|
124
|
-
# attribute filters, limits, sorting and other options
|
125
|
-
#
|
126
|
-
# @return [Hash]
|
127
|
-
# a Hash containing meta data, with the records in :records
|
128
|
-
def search(*args)
|
129
|
-
multi_search(_main_: args)[:_main_]
|
130
|
-
end
|
131
|
-
|
132
|
-
# Perform a faceted search on the index, using a base query and one or more facets.
|
133
|
-
#
|
134
|
-
# The base query is inherited by each facet, which may override (or refine) the
|
135
|
-
# query.
|
120
|
+
# When performing a faceted search, the base query is inherited by each facet, which
|
121
|
+
# may override (or refine) the query.
|
136
122
|
#
|
137
123
|
# The results returned include a :facets key, containing the results for each facet.
|
138
124
|
#
|
139
|
-
# @example
|
125
|
+
# @example Performing a faceted search
|
140
126
|
# index.faceted_search(
|
141
127
|
# "cats | dogs",
|
142
128
|
# category_id: 7,
|
@@ -146,16 +132,34 @@ module Oedipus
|
|
146
132
|
# }
|
147
133
|
# )
|
148
134
|
#
|
149
|
-
# @param [String]
|
150
|
-
# a fulltext query
|
135
|
+
# @param [String] query
|
136
|
+
# a fulltext query
|
151
137
|
#
|
152
138
|
# @param [Hash] options
|
153
|
-
# attribute filters
|
139
|
+
# attribute filters, limits, sorting, facets and other options
|
140
|
+
#
|
141
|
+
# @option [Hash] facets
|
142
|
+
# variations on the main search to return nested in the result
|
143
|
+
#
|
144
|
+
# @option [Array] attrs
|
145
|
+
# attributes to fetch from the index, either as Symbols, or SphinxQL fragments
|
146
|
+
#
|
147
|
+
# @option [Hash] order
|
148
|
+
# an attr => direction mapping of sort orders
|
149
|
+
#
|
150
|
+
# @option [Fixnum] limit
|
151
|
+
# a limit to apply, defaults to 20 inside Sphinx itself
|
152
|
+
#
|
153
|
+
# @option [Fixnum] offset
|
154
|
+
# an offset to apply, defaults to 0
|
155
|
+
#
|
156
|
+
# @option [Object] everything_else
|
157
|
+
# all additional options are taken to be attribute filters
|
154
158
|
#
|
155
159
|
# @return [Hash]
|
156
|
-
# a Hash
|
157
|
-
#
|
158
|
-
def
|
160
|
+
# a Hash containing meta data, with the records in :records, and if any
|
161
|
+
# facets were included, the facets inside the :facets Hash
|
162
|
+
def search(*args)
|
159
163
|
query, options = extract_query_data(args)
|
160
164
|
main_query = [query, options.reject { |k, _| k == :facets }]
|
161
165
|
facets = merge_queries(main_query, options.fetch(:facets, {}))
|
@@ -167,6 +171,17 @@ module Oedipus
|
|
167
171
|
end
|
168
172
|
end
|
169
173
|
|
174
|
+
# Perform a faceted search on the index, using a base query and one or more facets.
|
175
|
+
#
|
176
|
+
# This method is deprecated and will be removed in version 1.0. Use #search instead.
|
177
|
+
#
|
178
|
+
# @deprecated
|
179
|
+
#
|
180
|
+
# @see #search
|
181
|
+
def faceted_search(*args)
|
182
|
+
search(*args)
|
183
|
+
end
|
184
|
+
|
170
185
|
# Perform a a batch search on the index.
|
171
186
|
#
|
172
187
|
# A Hash of queries is passed, whose keys are used to collate the results in
|
data/lib/oedipus/version.rb
CHANGED
@@ -283,53 +283,7 @@ describe Oedipus::Index do
|
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
286
|
-
describe "#
|
287
|
-
before(:each) do
|
288
|
-
index.insert(1, title: "Badgers and foxes", views: 150, user_id: 1)
|
289
|
-
index.insert(2, title: "Rabbits and hares", views: 87, user_id: 1)
|
290
|
-
index.insert(3, title: "Badgers in the wild", views: 41, user_id: 2)
|
291
|
-
index.insert(4, title: "Badgers for all!", views: 3003, user_id: 1)
|
292
|
-
end
|
293
|
-
|
294
|
-
context "by fulltext querying" do
|
295
|
-
it "indicates the number of results for each query" do
|
296
|
-
results = index.multi_search(
|
297
|
-
badgers: "badgers",
|
298
|
-
rabbits: "rabbits"
|
299
|
-
)
|
300
|
-
results[:badgers][:total_found].should == 3
|
301
|
-
results[:rabbits][:total_found].should == 1
|
302
|
-
end
|
303
|
-
|
304
|
-
it "returns the records for each search" do
|
305
|
-
results = index.multi_search(
|
306
|
-
badgers: "badgers",
|
307
|
-
rabbits: "rabbits"
|
308
|
-
)
|
309
|
-
results[:badgers][:records].should == [
|
310
|
-
{ id: 1, views: 150, user_id: 1, status: "" },
|
311
|
-
{ id: 3, views: 41, user_id: 2, status: "" },
|
312
|
-
{ id: 4, views: 3003, user_id: 1, status: "" }
|
313
|
-
]
|
314
|
-
results[:rabbits][:records].should == [
|
315
|
-
{ id: 2, views: 87, user_id: 1, status: "" }
|
316
|
-
]
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
context "by attribute filtering" do
|
321
|
-
it "indicates the number of results for each query" do
|
322
|
-
results = index.multi_search(
|
323
|
-
shiela: {user_id: 1},
|
324
|
-
barry: {user_id: 2}
|
325
|
-
)
|
326
|
-
results[:shiela][:total_found].should == 3
|
327
|
-
results[:barry][:total_found].should == 1
|
328
|
-
end
|
329
|
-
end
|
330
|
-
end
|
331
|
-
|
332
|
-
describe "#faceted_search" do
|
286
|
+
describe "#search", "with :facets" do
|
333
287
|
before(:each) do
|
334
288
|
index.insert(1, title: "Badgers and foxes", body: "Badgers", views: 150, user_id: 1)
|
335
289
|
index.insert(2, title: "Rabbits and hares", body: "Rabbits", views: 87, user_id: 1)
|
@@ -339,7 +293,7 @@ describe Oedipus::Index do
|
|
339
293
|
|
340
294
|
context "with additional attribute filters" do
|
341
295
|
let(:results) do
|
342
|
-
index.
|
296
|
+
index.search(
|
343
297
|
"badgers",
|
344
298
|
facets: {
|
345
299
|
popular: {views: Oedipus.gte(50)},
|
@@ -369,7 +323,7 @@ describe Oedipus::Index do
|
|
369
323
|
|
370
324
|
context "with overriding attribute filters" do
|
371
325
|
let(:results) do
|
372
|
-
index.
|
326
|
+
index.search(
|
373
327
|
"badgers",
|
374
328
|
user_id: 1,
|
375
329
|
facets: {
|
@@ -387,7 +341,7 @@ describe Oedipus::Index do
|
|
387
341
|
|
388
342
|
context "with overriding overriding fulltext queries" do
|
389
343
|
let(:results) do
|
390
|
-
index.
|
344
|
+
index.search(
|
391
345
|
"badgers",
|
392
346
|
facets: {
|
393
347
|
rabbits: "rabbits"
|
@@ -404,7 +358,7 @@ describe Oedipus::Index do
|
|
404
358
|
|
405
359
|
context "with overriding refined fulltext queries" do
|
406
360
|
let(:results) do
|
407
|
-
index.
|
361
|
+
index.search(
|
408
362
|
"badgers",
|
409
363
|
facets: {
|
410
364
|
in_body: "@body (%{query})"
|
@@ -419,4 +373,50 @@ describe Oedipus::Index do
|
|
419
373
|
end
|
420
374
|
end
|
421
375
|
end
|
376
|
+
|
377
|
+
describe "#multi_search" do
|
378
|
+
before(:each) do
|
379
|
+
index.insert(1, title: "Badgers and foxes", views: 150, user_id: 1)
|
380
|
+
index.insert(2, title: "Rabbits and hares", views: 87, user_id: 1)
|
381
|
+
index.insert(3, title: "Badgers in the wild", views: 41, user_id: 2)
|
382
|
+
index.insert(4, title: "Badgers for all!", views: 3003, user_id: 1)
|
383
|
+
end
|
384
|
+
|
385
|
+
context "by fulltext querying" do
|
386
|
+
it "indicates the number of results for each query" do
|
387
|
+
results = index.multi_search(
|
388
|
+
badgers: "badgers",
|
389
|
+
rabbits: "rabbits"
|
390
|
+
)
|
391
|
+
results[:badgers][:total_found].should == 3
|
392
|
+
results[:rabbits][:total_found].should == 1
|
393
|
+
end
|
394
|
+
|
395
|
+
it "returns the records for each search" do
|
396
|
+
results = index.multi_search(
|
397
|
+
badgers: "badgers",
|
398
|
+
rabbits: "rabbits"
|
399
|
+
)
|
400
|
+
results[:badgers][:records].should == [
|
401
|
+
{ id: 1, views: 150, user_id: 1, status: "" },
|
402
|
+
{ id: 3, views: 41, user_id: 2, status: "" },
|
403
|
+
{ id: 4, views: 3003, user_id: 1, status: "" }
|
404
|
+
]
|
405
|
+
results[:rabbits][:records].should == [
|
406
|
+
{ id: 2, views: 87, user_id: 1, status: "" }
|
407
|
+
]
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
context "by attribute filtering" do
|
412
|
+
it "indicates the number of results for each query" do
|
413
|
+
results = index.multi_search(
|
414
|
+
shiela: {user_id: 1},
|
415
|
+
barry: {user_id: 2}
|
416
|
+
)
|
417
|
+
results[:shiela][:total_found].should == 3
|
418
|
+
results[:barry][:total_found].should == 1
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
422
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oedipus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &12876920 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *12876920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake-compiler
|
27
|
-
requirement: &
|
27
|
+
requirement: &12831220 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *12831220
|
36
36
|
description: ! "== Sphinx 2 Comes to Ruby\n\nOedipus brings full support for Sphinx
|
37
37
|
2 to Ruby:\n\n - real-time indexes (insert, replace, update, delete)\n - faceted
|
38
38
|
search (variations on a base query)\n - multi-queries (multiple queries executed
|
@@ -108,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
108
|
version: '0'
|
109
109
|
segments:
|
110
110
|
- 0
|
111
|
-
hash:
|
111
|
+
hash: 765099216142211442
|
112
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
@@ -117,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
117
|
version: '0'
|
118
118
|
segments:
|
119
119
|
- 0
|
120
|
-
hash:
|
120
|
+
hash: 765099216142211442
|
121
121
|
requirements: []
|
122
122
|
rubyforge_project: oedipus
|
123
123
|
rubygems_version: 1.8.11
|