0
0
Fork 0
polecat/spec/index_searcher/search_spec.rb

69 lines
2.1 KiB
Ruby

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe "IndexSearcher#search" do
let(:path) { prepare_index_dir }
let(:w) { Polecat::IndexWriter.new(path) }
let(:s) { Polecat::IndexSearcher.new :path => path }
it "returns an empty array when the query is empty" do
s.search(Polecat::Query.new).should == []
end
context "searching on a filled index" do
before do
w.add Spec::TestDocument.new(:id => 0, :name => 'foo')
w.add Spec::TestDocument.new(:id => 1, :name => 'bar')
w.add Spec::TestDocument.new(:id => 2, :name => 'baz')
w.add Spec::TestDocument.new(:id => 3, :name => 'foobar')
w.write
end
let :s do
Polecat::IndexSearcher.new(
:reader => w.create_reader,
:default_field => :name
)
end
let (:q1) { Polecat::Query.new.add(Polecat::Term.new(:id, :eq, 1)) }
it "returns an array of documents, when a document was found" do
s.search(q1).count.should == 1
end
let (:q2) { Polecat::Query.new.add(Polecat::Term.new(:name, :eq, 'foo')) }
it "returns only matches for a String query" do
s.search(q2).count.should == 1
end
let (:q3) { Polecat::Query.new.add(Polecat::Term.new(:name, :eq, /foo/)) }
it "returns all documents when an regexp is given" do
s.search(q3).count.should == 2
end
let (:q4) { Polecat::Query.new.add(Polecat::Term.new(:id, :eq, 33)) }
it "returns an empty array when no document matched" do
s.search(q4).count.should == 0
end
let (:q5) {
Polecat::Query.new.
add(Polecat::Term.new(:id, :eq, 3)).
add(Polecat::Term.new(:name, :eq, 'foobar'))
}
it "returns a document for a query with multiple terms" do
s.search(q5)[0].id.should == 3
end
let(:q6) {
Polecat::Query.new(:or).
add(Polecat::Term.new(:id, :eq, 1)).
add(Polecat::Term.new(:id, :eq, 2))
}
it "returns multiple documents for an 'or' relationship" do
result = s.search(q6)
result[0].id.should == 1
result[1].id.should == 2
end
end
end