solr-ruby 0.0.1
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/lib/solr.rb +18 -0
- data/lib/solr/connection.rb +158 -0
- data/lib/solr/document.rb +71 -0
- data/lib/solr/exception.rb +13 -0
- data/lib/solr/field.rb +35 -0
- data/lib/solr/request.rb +24 -0
- data/lib/solr/request/add_document.rb +63 -0
- data/lib/solr/request/base.rb +29 -0
- data/lib/solr/request/commit.rb +21 -0
- data/lib/solr/request/delete.rb +50 -0
- data/lib/solr/request/dismax.rb +43 -0
- data/lib/solr/request/index_info.rb +17 -0
- data/lib/solr/request/optimize.rb +21 -0
- data/lib/solr/request/ping.rb +36 -0
- data/lib/solr/request/select.rb +54 -0
- data/lib/solr/request/standard.rb +105 -0
- data/lib/solr/request/update.rb +22 -0
- data/lib/solr/response.rb +24 -0
- data/lib/solr/response/add_document.rb +17 -0
- data/lib/solr/response/base.rb +42 -0
- data/lib/solr/response/commit.rb +32 -0
- data/lib/solr/response/delete.rb +13 -0
- data/lib/solr/response/dismax.rb +8 -0
- data/lib/solr/response/index_info.rb +26 -0
- data/lib/solr/response/optimize.rb +14 -0
- data/lib/solr/response/ping.rb +28 -0
- data/lib/solr/response/ruby.rb +42 -0
- data/lib/solr/response/standard.rb +60 -0
- data/lib/solr/response/xml.rb +37 -0
- data/lib/solr/xml.rb +47 -0
- data/test/unit/add_document_test.rb +40 -0
- data/test/unit/commit_test.rb +41 -0
- data/test/unit/connection_test.rb +55 -0
- data/test/unit/delete_test.rb +56 -0
- data/test/unit/dismax_request_test.rb +26 -0
- data/test/unit/document_test.rb +59 -0
- data/test/unit/field_test.rb +42 -0
- data/test/unit/ping_test.rb +51 -0
- data/test/unit/request_test.rb +61 -0
- data/test/unit/response_test.rb +42 -0
- data/test/unit/solr_mock_base.rb +40 -0
- data/test/unit/standard_request_test.rb +108 -0
- data/test/unit/standard_response_test.rb +174 -0
- data/test/unit/suite.rb +25 -0
- metadata +92 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
|
16
|
+
class DismaxRequestTest < Test::Unit::TestCase
|
17
|
+
|
18
|
+
def test_basic_query
|
19
|
+
request = Solr::Request::Dismax.new(:query => 'query', :phrase_slop => '1000', :sort => [{:deedle => :descending}])
|
20
|
+
assert_match(/q=query/, request.to_s)
|
21
|
+
assert_match(/qt=dismax/, request.to_s)
|
22
|
+
assert_match(/ps=1000/, request.to_s)
|
23
|
+
assert_match(/sort=deedle%20desc/, request.to_s)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
|
16
|
+
class DocumentTest < Test::Unit::TestCase
|
17
|
+
|
18
|
+
def test_xml
|
19
|
+
doc = Solr::Document.new
|
20
|
+
doc << Solr::Field.new(:creator => 'Erik Hatcher')
|
21
|
+
assert_kind_of Solr::XML::Element, doc.to_xml
|
22
|
+
assert_match(/<doc>[\s]*<field name=['"]creator['"]>Erik Hatcher<\/field>[\s]*<\/doc>/m, doc.to_xml.to_s)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_repeatable
|
26
|
+
doc = Solr::Document.new
|
27
|
+
doc << Solr::Field.new(:creator => 'Erik Hatcher')
|
28
|
+
doc << Solr::Field.new(:creator => 'Otis Gospodnetic')
|
29
|
+
assert_kind_of Solr::XML::Element, doc.to_xml
|
30
|
+
assert_match(/<doc>[\s]*<field name=['"]creator['"]>Erik Hatcher<\/field>[\s]*<field name=['"]creator['"]>Otis Gospodnetic<\/field>[\s]*<\/doc>/m, doc.to_xml.to_s)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_repeatable_in_hash
|
34
|
+
doc = Solr::Document.new({:creator => ['Erik Hatcher', 'Otis Gospodnetic']})
|
35
|
+
assert_match(/<doc>[\s]*<field name=['"]creator['"]>Erik Hatcher<\/field>[\s]*<field name=['"]creator['"]>Otis Gospodnetic<\/field>[\s]*<\/doc>/m, doc.to_xml.to_s)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_bad_doc
|
39
|
+
doc = Solr::Document.new
|
40
|
+
assert_raise(RuntimeError) do
|
41
|
+
doc << "invalid"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_hash_shorthand
|
46
|
+
doc = Solr::Document.new :creator => 'Erik Hatcher', :title => 'Lucene in Action'
|
47
|
+
assert_equal 'Erik Hatcher', doc[:creator]
|
48
|
+
assert_equal 'Lucene in Action', doc[:title]
|
49
|
+
assert_equal nil, doc[:foo]
|
50
|
+
|
51
|
+
doc = Solr::Document.new
|
52
|
+
doc << {:creator => 'Erik Hatcher', :title => 'Lucene in Action'}
|
53
|
+
doc[:subject] = 'Search'
|
54
|
+
assert_equal 'Erik Hatcher', doc[:creator]
|
55
|
+
assert_equal 'Lucene in Action', doc[:title]
|
56
|
+
assert_equal 'Search', doc[:subject]
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
|
16
|
+
class FieldTest < Test::Unit::TestCase
|
17
|
+
|
18
|
+
def test_xml
|
19
|
+
field = Solr::Field.new :creator => 'Erik Hatcher'
|
20
|
+
assert_kind_of Solr::XML::Element, field.to_xml
|
21
|
+
assert_match(/<field name=["']creator["']>Erik Hatcher<\/field>/, field.to_xml.to_s)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_escaped_xml
|
25
|
+
field = Solr::Field.new :creator => 'Erik Hatcher & His Amazing Leaping Ability'
|
26
|
+
assert_kind_of Solr::XML::Element, field.to_xml
|
27
|
+
assert_match(/<field name=["']creator["']>Erik Hatcher & His Amazing Leaping Ability<\/field>/, field.to_xml.to_s)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_xml_date
|
31
|
+
field = Solr::Field.new :time => Time.now
|
32
|
+
assert_kind_of Solr::XML::Element, field.to_xml
|
33
|
+
assert_match(/<field name=["']time["']>[\d]{4}-[\d]{2}-[\d]{2}T[\d]{2}:[\d]{2}:[\d]{2}Z<\/field>/, field.to_xml.to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_i18n_xml
|
37
|
+
field = Solr::Field.new :i18nstring => 'Äêâîôû Öëäïöü'
|
38
|
+
assert_kind_of Solr::XML::Element, field.to_xml
|
39
|
+
assert_match(/<field name=["']i18nstring["']>Äêâîôû Öëäïöü<\/field>/m, field.to_xml.to_s)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'solr_mock_base'
|
14
|
+
|
15
|
+
class PingTest < SolrMockBaseTestCase
|
16
|
+
|
17
|
+
def test_ping_response
|
18
|
+
xml =
|
19
|
+
<<PING_RESPONSE
|
20
|
+
|
21
|
+
<?xml-stylesheet type="text/xsl" href="ping.xsl"?>
|
22
|
+
|
23
|
+
<solr>
|
24
|
+
<ping>
|
25
|
+
|
26
|
+
</ping>
|
27
|
+
</solr>
|
28
|
+
PING_RESPONSE
|
29
|
+
conn = Solr::Connection.new('http://localhost:9999')
|
30
|
+
set_post_return(xml)
|
31
|
+
response = conn.send(Solr::Request::Ping.new)
|
32
|
+
assert_kind_of Solr::Response::Ping, response
|
33
|
+
assert_equal true, response.ok?
|
34
|
+
|
35
|
+
# test shorthand
|
36
|
+
assert true, conn.ping
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_bad_ping_response
|
40
|
+
xml = "<foo>bar</foo>"
|
41
|
+
conn = Solr::Connection.new('http://localhost:9999')
|
42
|
+
set_post_return(xml)
|
43
|
+
response = conn.send(Solr::Request::Ping.new)
|
44
|
+
assert_kind_of Solr::Response::Ping, response
|
45
|
+
assert_equal false, response.ok?
|
46
|
+
|
47
|
+
# test shorthand
|
48
|
+
assert_equal false, conn.ping
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
|
16
|
+
class BadRequest < Solr::Request::Base
|
17
|
+
end
|
18
|
+
|
19
|
+
class RequestTest < Test::Unit::TestCase
|
20
|
+
|
21
|
+
def test_commit_request
|
22
|
+
request = Solr::Request::Commit.new
|
23
|
+
assert_equal :xml, request.response_format
|
24
|
+
assert_equal 'update', request.handler
|
25
|
+
assert_equal '<commit/>', request.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_add_doc_request
|
29
|
+
request = Solr::Request::AddDocument.new(:title => "title")
|
30
|
+
assert_match(/<add>[\s]*<doc>[\s]*<field name=["']title["']>title<\/field>[\s]*<\/doc>[\s]*<\/add>/m, request.to_s)
|
31
|
+
assert_equal :xml, request.response_format
|
32
|
+
assert_equal 'update', request.handler
|
33
|
+
|
34
|
+
assert_raise(RuntimeError) do
|
35
|
+
Solr::Request::AddDocument.new("invalid")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_add_multidoc_request
|
40
|
+
request = Solr::Request::AddDocument.new([{:title => "title1"}, {:title => "title2"}])
|
41
|
+
assert_match(/<add>[\s]*<doc>[\s]*<field name=["']title["']>title1<\/field>[\s]*<\/doc>[\s]*<doc>[\s]*<field name=["']title["']>title2<\/field>[\s]*<\/doc>[\s]*<\/add>/m, request.to_s)
|
42
|
+
assert_equal :xml, request.response_format
|
43
|
+
assert_equal 'update', request.handler
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_ping_request
|
47
|
+
request = Solr::Request::Ping.new
|
48
|
+
assert_equal :xml, request.response_format
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_bad_request_class
|
52
|
+
assert_raise(RuntimeError) do
|
53
|
+
BadRequest.new.response_format
|
54
|
+
end
|
55
|
+
|
56
|
+
assert_raise(RuntimeError) do
|
57
|
+
BadRequest.new.handler
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
require 'solr_mock_base'
|
16
|
+
|
17
|
+
|
18
|
+
class ResponseTest < SolrMockBaseTestCase
|
19
|
+
|
20
|
+
def test_response_xml_error
|
21
|
+
begin
|
22
|
+
Solr::Response::Xml.new("<broken>invalid xml&")
|
23
|
+
flunk("failed to get Solr::Exception as expected")
|
24
|
+
rescue Exception => exception
|
25
|
+
assert_kind_of Solr::Exception, exception
|
26
|
+
assert_match 'invalid response xml', exception.to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_invalid_ruby
|
31
|
+
assert_raise(Solr::Exception) do
|
32
|
+
Solr::Response::Ruby.new(' {...')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_bogus_request_handling
|
37
|
+
assert_raise(Solr::Exception) do
|
38
|
+
Solr::Response::Base.make_response(Solr::Request::Select.new, "response data")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
|
16
|
+
# TODO: Maybe replace this with flexmock
|
17
|
+
class SolrMockBaseTestCase < Test::Unit::TestCase
|
18
|
+
include Solr
|
19
|
+
|
20
|
+
def setup
|
21
|
+
Connection.send(:alias_method, :orig_post, :post)
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
Connection.send(:alias_method, :post, :orig_post)
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_post_return(value)
|
29
|
+
Connection.class_eval %{
|
30
|
+
def post(request)
|
31
|
+
%q{#{value}}
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_dummy
|
37
|
+
# So Test::Unit is happy running this class
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
|
16
|
+
class StandardRequestTest < Test::Unit::TestCase
|
17
|
+
|
18
|
+
def test_basic_query
|
19
|
+
request = Solr::Request::Standard.new(:query => 'query')
|
20
|
+
assert_equal :ruby, request.response_format
|
21
|
+
assert_equal 'select', request.handler
|
22
|
+
assert_equal 'query', request.to_hash[:q]
|
23
|
+
assert_match /q=query/, request.to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_bad_params
|
27
|
+
assert_raise(RuntimeError) do
|
28
|
+
Solr::Request::Standard.new(:foo => "invalid")
|
29
|
+
end
|
30
|
+
|
31
|
+
assert_raise(RuntimeError) do
|
32
|
+
Solr::Request::Standard.new(:query => "valid", :foo => "invalid")
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_raise(RuntimeError) do
|
36
|
+
Solr::Request::Standard.new(:query => "valid", :operator => :bogus)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_common_params
|
41
|
+
request = Solr::Request::Standard.new(:query => 'query', :start => 10, :rows => 50,
|
42
|
+
:filter_queries => ['fq1', 'fq2'], :field_list => ['id','title','score'], :operator => :and)
|
43
|
+
assert_equal 10, request.to_hash[:start]
|
44
|
+
assert_equal 50, request.to_hash[:rows]
|
45
|
+
assert_equal ['fq1','fq2'], request.to_hash[:fq]
|
46
|
+
assert_equal "id,title,score", request.to_hash[:fl]
|
47
|
+
assert_equal "AND", request.to_hash["q.op"]
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_missing_params
|
51
|
+
request = Solr::Request::Standard.new(:query => 'query', :debug_query => false, :facets => {:fields =>[:category_facet]})
|
52
|
+
assert_nil request.to_hash[:rows]
|
53
|
+
assert_no_match /rows/, request.to_s
|
54
|
+
assert_no_match /facet\.sort/, request.to_s
|
55
|
+
assert_match /debugQuery/, request.to_s
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_facet_params_all
|
59
|
+
request = Solr::Request::Standard.new(:query => 'query',
|
60
|
+
:facets => {
|
61
|
+
:fields => [:genre,
|
62
|
+
# field that overrides the global facet parameters
|
63
|
+
{:year => {:limit => 50, :mincount => 0, :missing => false, :sort => :term, :prefix=>"199"}}],
|
64
|
+
:queries => ["q1", "q2"],
|
65
|
+
:prefix => "cat",
|
66
|
+
:limit => 5, :zeros => true, :mincount => 20, :sort => :count # global facet parameters
|
67
|
+
}
|
68
|
+
)
|
69
|
+
|
70
|
+
hash = request.to_hash
|
71
|
+
assert_equal true, hash[:facet]
|
72
|
+
assert_equal [:genre, :year], hash["facet.field"]
|
73
|
+
assert_equal ["q1", "q2"], hash["facet.query"]
|
74
|
+
assert_equal 5, hash["facet.limit"]
|
75
|
+
assert_equal 20, hash["facet.mincount"]
|
76
|
+
assert_equal true, hash["facet.sort"]
|
77
|
+
assert_equal "cat", hash["facet.prefix"]
|
78
|
+
assert_equal 50, hash["f.year.facet.limit"]
|
79
|
+
assert_equal 0, hash["f.year.facet.mincount"]
|
80
|
+
assert_equal false, hash["f.year.facet.sort"]
|
81
|
+
assert_equal "199", hash["f.year.facet.prefix"]
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_basic_sort
|
85
|
+
request = Solr::Request::Standard.new(:query => 'query', :sort => [{:title => :descending}])
|
86
|
+
assert_equal 'query;title desc', request.to_hash[:q]
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_highlighting
|
90
|
+
request = Solr::Request::Standard.new(:query => 'query',
|
91
|
+
:highlighting => {
|
92
|
+
:field_list => ['title', 'author'],
|
93
|
+
:max_snippets => 3,
|
94
|
+
:require_field_match => true,
|
95
|
+
:prefix => "<blink>",
|
96
|
+
:suffix => "</blink>"
|
97
|
+
}
|
98
|
+
)
|
99
|
+
|
100
|
+
hash = request.to_hash
|
101
|
+
assert_equal true, hash[:hl]
|
102
|
+
assert_equal "title,author", hash["hl.fl"]
|
103
|
+
assert_equal true, hash["hl.requireFieldMatch"]
|
104
|
+
assert_equal "<blink>", hash["hl.simple.pre"]
|
105
|
+
assert_equal "</blink>", hash["hl.simple.post"]
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'solr_mock_base'
|
14
|
+
|
15
|
+
class StandardResponseTest < SolrMockBaseTestCase
|
16
|
+
|
17
|
+
def test_basic
|
18
|
+
ruby_code =
|
19
|
+
<<RUBY_CODE
|
20
|
+
{
|
21
|
+
'responseHeader'=>{
|
22
|
+
'status'=>0,
|
23
|
+
'QTime'=>1,
|
24
|
+
'params'=>{
|
25
|
+
'wt'=>'ruby',
|
26
|
+
'rows'=>'10',
|
27
|
+
'explainOther'=>'',
|
28
|
+
'start'=>'0',
|
29
|
+
'hl.fl'=>'',
|
30
|
+
'indent'=>'on',
|
31
|
+
'q'=>'guido',
|
32
|
+
'fl'=>'*,score',
|
33
|
+
'qt'=>'standard',
|
34
|
+
'version'=>'2.2'}},
|
35
|
+
'response'=>{'numFound'=>1,'start'=>0,'maxScore'=>0.67833745,'docs'=>[
|
36
|
+
{
|
37
|
+
'name'=>'guido von rossum',
|
38
|
+
'id'=>'123',
|
39
|
+
'timestamp'=>'2007-01-16T09:55:30.589Z',
|
40
|
+
'score'=>0.67833745}]
|
41
|
+
}}
|
42
|
+
RUBY_CODE
|
43
|
+
conn = Solr::Connection.new 'http://localhost:9999'
|
44
|
+
set_post_return(ruby_code)
|
45
|
+
response = conn.send(Solr::Request::Standard.new(:query => 'foo'))
|
46
|
+
assert_equal true, response.ok?
|
47
|
+
assert response.query_time
|
48
|
+
assert_equal 1, response.total_hits
|
49
|
+
assert_equal 0, response.start
|
50
|
+
assert_equal 0.67833745, response.max_score
|
51
|
+
assert_equal 1, response.hits.length
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_iteration
|
55
|
+
ruby_code =
|
56
|
+
<<RUBY_CODE
|
57
|
+
{
|
58
|
+
'responseHeader'=>{
|
59
|
+
'status'=>0,
|
60
|
+
'QTime'=>0,
|
61
|
+
'params'=>{
|
62
|
+
'wt'=>'ruby',
|
63
|
+
'rows'=>'10',
|
64
|
+
'explainOther'=>'',
|
65
|
+
'start'=>'0',
|
66
|
+
'hl.fl'=>'',
|
67
|
+
'indent'=>'on',
|
68
|
+
'q'=>'guido',
|
69
|
+
'fl'=>'*,score',
|
70
|
+
'qt'=>'standard',
|
71
|
+
'version'=>'2.2'}},
|
72
|
+
'response'=>{'numFound'=>22,'start'=>0,'maxScore'=>0.53799295,'docs'=>[
|
73
|
+
{
|
74
|
+
'name'=>'guido von rossum the 0',
|
75
|
+
'id'=>'0',
|
76
|
+
'score'=>0.53799295},
|
77
|
+
{
|
78
|
+
'name'=>'guido von rossum the 1',
|
79
|
+
'id'=>'1',
|
80
|
+
'score'=>0.53799295},
|
81
|
+
{
|
82
|
+
'name'=>'guido von rossum the 2',
|
83
|
+
'id'=>'2',
|
84
|
+
'score'=>0.53799295},
|
85
|
+
{
|
86
|
+
'name'=>'guido von rossum the 3',
|
87
|
+
'id'=>'3',
|
88
|
+
'score'=>0.53799295},
|
89
|
+
{
|
90
|
+
'name'=>'guido von rossum the 4',
|
91
|
+
'id'=>'4',
|
92
|
+
'score'=>0.53799295},
|
93
|
+
{
|
94
|
+
'name'=>'guido von rossum the 5',
|
95
|
+
'id'=>'5',
|
96
|
+
'score'=>0.53799295},
|
97
|
+
{
|
98
|
+
'name'=>'guido von rossum the 6',
|
99
|
+
'id'=>'6',
|
100
|
+
'score'=>0.53799295},
|
101
|
+
{
|
102
|
+
'name'=>'guido von rossum the 7',
|
103
|
+
'id'=>'7',
|
104
|
+
'score'=>0.53799295},
|
105
|
+
{
|
106
|
+
'name'=>'guido von rossum the 8',
|
107
|
+
'id'=>'8',
|
108
|
+
'score'=>0.53799295},
|
109
|
+
{
|
110
|
+
'name'=>'guido von rossum the 9',
|
111
|
+
'id'=>'9',
|
112
|
+
'score'=>0.53799295}]
|
113
|
+
}}
|
114
|
+
RUBY_CODE
|
115
|
+
conn = Solr::Connection.new 'http://localhost:9999'
|
116
|
+
set_post_return(ruby_code)
|
117
|
+
|
118
|
+
count = 0
|
119
|
+
conn.query('foo') do |hit|
|
120
|
+
assert_equal "guido von rossum the #{count}", hit['name']
|
121
|
+
count += 1
|
122
|
+
end
|
123
|
+
|
124
|
+
assert_equal 10, count
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_facets
|
128
|
+
ruby_code =
|
129
|
+
<<RUBY_CODE
|
130
|
+
{
|
131
|
+
'responseHeader'=>{
|
132
|
+
'status'=>0,
|
133
|
+
'QTime'=>1897,
|
134
|
+
'params'=>{
|
135
|
+
'facet.limit'=>'20',
|
136
|
+
'wt'=>'ruby',
|
137
|
+
'rows'=>'0',
|
138
|
+
'facet'=>'true',
|
139
|
+
'facet.mincount'=>'1',
|
140
|
+
'facet.field'=>[
|
141
|
+
'subject_genre_facet',
|
142
|
+
'subject_geographic_facet',
|
143
|
+
'subject_format_facet',
|
144
|
+
'subject_era_facet',
|
145
|
+
'subject_topic_facet'],
|
146
|
+
'indent'=>'true',
|
147
|
+
'fl'=>'*,score',
|
148
|
+
'q'=>'[* TO *]',
|
149
|
+
'qt'=>'standard',
|
150
|
+
'facet.sort'=>'true'}},
|
151
|
+
'response'=>{'numFound'=>49999,'start'=>0,'maxScore'=>1.0,'docs'=>[]
|
152
|
+
},
|
153
|
+
'facet_counts'=>{
|
154
|
+
'facet_queries'=>{},
|
155
|
+
'facet_fields'=>{
|
156
|
+
'subject_genre_facet'=>[
|
157
|
+
'Biography.',2605,
|
158
|
+
'Congresses.',1837,
|
159
|
+
'Bibliography.',672,
|
160
|
+
'Exhibitions.',642,
|
161
|
+
'Periodicals.',615,
|
162
|
+
'Sources.',485]}}
|
163
|
+
}
|
164
|
+
RUBY_CODE
|
165
|
+
set_post_return(ruby_code)
|
166
|
+
conn = Solr::Connection.new "http://localhost:9999"
|
167
|
+
response = conn.query('foo')
|
168
|
+
facets = response.field_facets('subject_genre_facet')
|
169
|
+
assert_equal 2605, facets[0].value
|
170
|
+
assert_equal 485, facets[5].value
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|