zigexn_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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +201 -0
  3. data/README.md +41 -0
  4. data/lib/solr/connection.rb +179 -0
  5. data/lib/solr/document.rb +73 -0
  6. data/lib/solr/exception.rb +13 -0
  7. data/lib/solr/field.rb +39 -0
  8. data/lib/solr/importer/array_mapper.rb +26 -0
  9. data/lib/solr/importer/delimited_file_source.rb +38 -0
  10. data/lib/solr/importer/hpricot_mapper.rb +27 -0
  11. data/lib/solr/importer/mapper.rb +51 -0
  12. data/lib/solr/importer/solr_source.rb +43 -0
  13. data/lib/solr/importer/xpath_mapper.rb +35 -0
  14. data/lib/solr/importer.rb +19 -0
  15. data/lib/solr/indexer.rb +52 -0
  16. data/lib/solr/request/add_document.rb +63 -0
  17. data/lib/solr/request/base.rb +36 -0
  18. data/lib/solr/request/commit.rb +30 -0
  19. data/lib/solr/request/delete.rb +50 -0
  20. data/lib/solr/request/dismax.rb +46 -0
  21. data/lib/solr/request/index_info.rb +22 -0
  22. data/lib/solr/request/modify_document.rb +51 -0
  23. data/lib/solr/request/optimize.rb +21 -0
  24. data/lib/solr/request/ping.rb +36 -0
  25. data/lib/solr/request/select.rb +56 -0
  26. data/lib/solr/request/spellcheck.rb +30 -0
  27. data/lib/solr/request/standard.rb +376 -0
  28. data/lib/solr/request/update.rb +23 -0
  29. data/lib/solr/request.rb +26 -0
  30. data/lib/solr/response/add_document.rb +17 -0
  31. data/lib/solr/response/base.rb +42 -0
  32. data/lib/solr/response/commit.rb +17 -0
  33. data/lib/solr/response/delete.rb +13 -0
  34. data/lib/solr/response/dismax.rb +20 -0
  35. data/lib/solr/response/index_info.rb +26 -0
  36. data/lib/solr/response/modify_document.rb +17 -0
  37. data/lib/solr/response/optimize.rb +14 -0
  38. data/lib/solr/response/ping.rb +28 -0
  39. data/lib/solr/response/ruby.rb +42 -0
  40. data/lib/solr/response/select.rb +17 -0
  41. data/lib/solr/response/spellcheck.rb +20 -0
  42. data/lib/solr/response/standard.rb +60 -0
  43. data/lib/solr/response/xml.rb +42 -0
  44. data/lib/solr/response.rb +27 -0
  45. data/lib/solr/solrtasks.rb +27 -0
  46. data/lib/solr/util.rb +32 -0
  47. data/lib/solr/xml.rb +47 -0
  48. data/lib/solr.rb +21 -0
  49. metadata +119 -0
@@ -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
+ class Solr::Importer::Mapper
14
+ def initialize(mapping, options={})
15
+ @mapping = mapping
16
+ @options = options
17
+ end
18
+
19
+ def field_data(orig_data, field_name)
20
+ orig_data[field_name]
21
+ end
22
+
23
+ def mapped_field_value(orig_data, field_mapping)
24
+ case field_mapping
25
+ when String
26
+ field_mapping
27
+ when Proc
28
+ field_mapping.call(orig_data) # TODO pass in more context, like self or a function for field_data, etc
29
+ when Symbol
30
+ field_data(orig_data, @options[:stringify_symbols] ? field_mapping.to_s : field_mapping)
31
+ when Enumerable
32
+ field_mapping.collect {|orig_field_name| mapped_field_value(orig_data, orig_field_name)}.flatten
33
+ else
34
+ raise "Unknown mapping for #{field_mapping}"
35
+ end
36
+ end
37
+
38
+ def map(orig_data)
39
+ mapped_data = {}
40
+ @mapping.each do |solr_name, field_mapping|
41
+ value = mapped_field_value(orig_data, field_mapping)
42
+ mapped_data[solr_name] = value if value
43
+ end
44
+
45
+ mapped_data
46
+ end
47
+
48
+
49
+
50
+
51
+ end
@@ -0,0 +1,43 @@
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'
14
+
15
+ class Solr::Importer::SolrSource
16
+ def initialize(solr_url, query, filter_queries=nil, options={})
17
+ @connection = Solr::Connection.new(solr_url)
18
+ @query = query
19
+ @filter_queries = filter_queries
20
+
21
+ @page_size = options[:page_size] || 1000
22
+ @field_list = options[:field_list] || ["*"]
23
+ end
24
+
25
+ def each
26
+ done = false
27
+ start = 0
28
+ until done do
29
+ # request N documents from a starting point
30
+ request = Solr::Request::Standard.new(:query => @query,
31
+ :rows => @page_size,
32
+ :start => start,
33
+ :field_list => @field_list,
34
+ :filter_queries => @filter_queries)
35
+ response = @connection.send(request)
36
+ response.each do |doc|
37
+ yield doc # TODO: perhaps convert to HashWithIndifferentAccess.new(doc), so stringify_keys isn't necessary
38
+ end
39
+ done = start + @page_size >= response.total_hits
40
+ start = start + @page_size
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,35 @@
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
+ begin
14
+ require 'xml/libxml'
15
+
16
+ # For files with the first line containing field names
17
+ class Solr::Importer::XPathMapper < Solr::Importer::Mapper
18
+ def field_data(doc, xpath)
19
+ doc.find(xpath.to_s).collect do |node|
20
+ case node
21
+ when XML::Attr
22
+ node.value
23
+ when XML::Node
24
+ node.content
25
+ end
26
+ end
27
+ end
28
+ end
29
+ rescue LoadError => e # If we can't load libxml
30
+ class Solr::Importer::XPathMapper
31
+ def initialize(mapping, options={})
32
+ raise "libxml not installed"
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,19 @@
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
+ module Solr; module Importer; end; end
14
+ require 'solr/importer/mapper'
15
+ require 'solr/importer/array_mapper'
16
+ require 'solr/importer/delimited_file_source'
17
+ require 'solr/importer/hpricot_mapper'
18
+ require 'solr/importer/xpath_mapper'
19
+ require 'solr/importer/solr_source'
@@ -0,0 +1,52 @@
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
+ class Solr::Indexer
14
+ attr_reader :solr
15
+
16
+ # TODO: document options!
17
+ def initialize(data_source, mapper_or_mapping, options={})
18
+ solr_url = options[:solr_url] || ENV["SOLR_URL"] || "http://localhost:8983/solr"
19
+ @solr = Solr::Connection.new(solr_url, options) #TODO - these options contain the solr_url and debug keys also, so tidy up what gets passed
20
+
21
+ @data_source = data_source
22
+ @mapper = mapper_or_mapping.is_a?(Hash) ? Solr::Importer::Mapper.new(mapper_or_mapping) : mapper_or_mapping
23
+
24
+ @buffer_docs = options[:buffer_docs]
25
+ @debug = options[:debug]
26
+ end
27
+
28
+ def index
29
+ buffer = []
30
+ @data_source.each do |record|
31
+ document = @mapper.map(record)
32
+
33
+ # TODO: check arrity of block, if 3, pass counter as 3rd argument
34
+ yield(record, document) if block_given? # TODO check return of block, if not true then don't index, or perhaps if document.empty?
35
+
36
+ buffer << document
37
+
38
+ if !@buffer_docs || buffer.size == @buffer_docs
39
+ add_docs(buffer)
40
+ buffer.clear
41
+ end
42
+ end
43
+ add_docs(buffer) if !buffer.empty?
44
+
45
+ @solr.commit unless @debug # TODO: provide option to not commit
46
+ end
47
+
48
+ def add_docs(documents)
49
+ @solr.add(documents) unless @debug
50
+ puts documents.inspect if @debug
51
+ end
52
+ end
@@ -0,0 +1,63 @@
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/xml'
14
+ require 'solr/request/base'
15
+ require 'solr/document'
16
+ require 'solr/request/update'
17
+
18
+ class Solr::Request::AddDocument < Solr::Request::Update
19
+
20
+ # create the request, optionally passing in a Solr::Document
21
+ #
22
+ # request = Solr::Request::AddDocument.new doc
23
+ #
24
+ # as a short cut you can pass in a Hash instead:
25
+ #
26
+ # request = Solr::Request::AddDocument.new :creator => 'Jorge Luis Borges'
27
+ #
28
+ # or an array, to add multiple documents at the same time:
29
+ #
30
+ # request = Solr::Request::AddDocument.new([doc1, doc2, doc3])
31
+
32
+ def initialize(doc={})
33
+ @docs = []
34
+ if doc.is_a?(Array)
35
+ doc.each { |d| add_doc(d) }
36
+ else
37
+ add_doc(doc)
38
+ end
39
+ end
40
+
41
+ # returns the request as a string suitable for posting
42
+
43
+ def to_s
44
+ e = Solr::XML::Element.new 'add'
45
+ for doc in @docs
46
+ e.add_element doc.to_xml
47
+ end
48
+ return e.to_s
49
+ end
50
+
51
+ private
52
+ def add_doc(doc)
53
+ case doc
54
+ when Hash
55
+ @docs << Solr::Document.new(doc)
56
+ when Solr::Document
57
+ @docs << doc
58
+ else
59
+ raise "must pass in Solr::Document or Hash"
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,36 @@
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
+ class Solr::Request::Base
14
+
15
+
16
+ #TODO : Add base support for the debugQuery flag, and such that the response provides debug output easily
17
+
18
+ # returns either :xml or :ruby depending on what the
19
+ # response type is for a given request
20
+
21
+ def response_format
22
+ raise "unknown request type: #{self.class}"
23
+ end
24
+
25
+ def content_type
26
+ 'text/xml; charset=utf-8'
27
+ end
28
+
29
+ # returns the solr handler or url fragment that can
30
+ # respond to this type of request
31
+
32
+ def handler
33
+ raise "unknown request type: #{self.class}"
34
+ end
35
+
36
+ end
@@ -0,0 +1,30 @@
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/xml'
14
+
15
+ class Solr::Request::Commit < Solr::Request::Update
16
+
17
+ def initialize(options={})
18
+ @wait_searcher = options[:wait_searcher] || true
19
+ @wait_flush_option = options[:wait_flush_option] || false
20
+ @wait_flush = options[:wait_flush] || true
21
+ end
22
+
23
+ def to_s
24
+ e = Solr::XML::Element.new('commit')
25
+ e.attributes['waitSearcher'] = @wait_searcher ? 'true' : 'false'
26
+ e.attributes['waitFlush'] = @wait_flush ? 'true' : 'false' if @wait_flush_option
27
+ e.to_s
28
+ end
29
+
30
+ end
@@ -0,0 +1,50 @@
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/xml'
14
+
15
+ class Solr::Request::Delete < Solr::Request::Update
16
+
17
+ # A delete request can be for a specific document id
18
+ #
19
+ # request = Solr::Request::Delete.new(:id => 1234)
20
+ #
21
+ # or by query:
22
+ #
23
+ # request = Solr::Request::Delete.new(:query =>
24
+ #
25
+ def initialize(options)
26
+ unless options.kind_of?(Hash) and (options[:id] or options[:query])
27
+ raise Solr::Exception.new("must pass in :id or :query")
28
+ end
29
+ if options[:id] and options[:query]
30
+ raise Solr::Exception.new("can't pass in both :id and :query")
31
+ end
32
+ @document_id = options[:id]
33
+ @query = options[:query]
34
+ end
35
+
36
+ def to_s
37
+ delete_element = Solr::XML::Element.new('delete')
38
+ if @document_id
39
+ id_element = Solr::XML::Element.new('id')
40
+ id_element.text = @document_id
41
+ delete_element.add_element(id_element)
42
+ elsif @query
43
+ query = Solr::XML::Element.new('query')
44
+ query.text = @query
45
+ delete_element.add_element(query)
46
+ end
47
+ delete_element.to_s
48
+ end
49
+ end
50
+
@@ -0,0 +1,46 @@
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
+ class Solr::Request::Dismax < Solr::Request::Standard
14
+
15
+ VALID_PARAMS.replace(VALID_PARAMS + [:tie_breaker, :query_fields, :minimum_match, :phrase_fields, :phrase_slop,
16
+ :boost_query, :boost_functions])
17
+
18
+ def initialize(params)
19
+ @alternate_query = params.delete(:alternate_query)
20
+ @sort_values = params.delete(:sort)
21
+
22
+ super
23
+
24
+ @query_type = "dismax"
25
+ end
26
+
27
+ def to_hash
28
+ hash = super
29
+ hash[:tie] = @params[:tie_breaker]
30
+ hash[:mm] = @params[:minimum_match]
31
+ hash[:qf] = @params[:query_fields]
32
+ hash[:pf] = @params[:phrase_fields]
33
+ hash[:ps] = @params[:phrase_slop]
34
+ hash[:bq] = @params[:boost_query]
35
+ hash[:bf] = @params[:boost_functions]
36
+ hash["q.alt"] = @alternate_query
37
+ # FIXME: 2007-02-13 <coda.hale@gmail.com> -- This code is duplicated in
38
+ # Solr::Request::Standard. It should be refactored into a single location.
39
+ hash[:sort] = @sort_values.collect do |sort|
40
+ key = sort.keys[0]
41
+ "#{key.to_s} #{sort[key] == :descending ? 'desc' : 'asc'}"
42
+ end.join(',') if @sort_values
43
+ return hash
44
+ end
45
+
46
+ end
@@ -0,0 +1,22 @@
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
+ class Solr::Request::IndexInfo < Solr::Request::Select
14
+
15
+ def handler
16
+ 'admin/luke'
17
+ end
18
+
19
+ def to_hash
20
+ {:numTerms => 0}.merge(super.to_hash)
21
+ end
22
+ 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/xml'
14
+ require 'solr/request/base'
15
+ require 'solr/document'
16
+ require 'solr/request/update'
17
+
18
+ class Solr::Request::ModifyDocument < Solr::Request::Update
19
+
20
+ # Example: ModifyDocument.new(:id => 10, :overwrite => {:field_name => "new value"})
21
+ def initialize(update_data)
22
+ modes = []
23
+ @doc = {}
24
+ [:overwrite, :append, :distinct, :increment, :delete].each do |mode|
25
+ field_data = update_data[mode]
26
+ if field_data
27
+ field_data.each do |field_name, field_value|
28
+ modes << "#{field_name}:#{mode.to_s.upcase}"
29
+ @doc[field_name] = field_value if field_value # if value is nil, omit so it can be removed
30
+ end
31
+ update_data.delete mode
32
+ end
33
+ end
34
+ @mode = modes.join(",")
35
+
36
+ # only one key should be left over, the id
37
+ @doc[update_data.keys[0].to_s] = update_data.values[0]
38
+ end
39
+
40
+ # returns the request as a string suitable for posting
41
+ def to_s
42
+ e = Solr::XML::Element.new 'add'
43
+ e.add_element(Solr::Document.new(@doc).to_xml)
44
+ return e.to_s
45
+ end
46
+
47
+ def handler
48
+ "update?mode=#{@mode}"
49
+ end
50
+
51
+ end
@@ -0,0 +1,21 @@
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/xml'
14
+
15
+ class Solr::Request::Optimize < Solr::Request::Update
16
+
17
+ def to_s
18
+ Solr::XML::Element.new('optimize').to_s
19
+ end
20
+
21
+ end
@@ -0,0 +1,36 @@
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
+ # TODO: Consider something lazy like this?
14
+ # Solr::Request::Ping = Solr::Request.simple_request :format=>:xml, :handler=>'admin/ping'
15
+ # class Solr::Request
16
+ # def self.simple_request(options)
17
+ # Class.new do
18
+ # def response_format
19
+ # options[:format]
20
+ # end
21
+ # def handler
22
+ # options[:handler]
23
+ # end
24
+ # end
25
+ # end
26
+ # end
27
+
28
+ class Solr::Request::Ping < Solr::Request::Base
29
+ def response_format
30
+ :xml
31
+ end
32
+
33
+ def handler
34
+ 'admin/ping'
35
+ end
36
+ end
@@ -0,0 +1,56 @@
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 'erb'
14
+
15
+ # "Abstract" base class, only useful with subclasses that add parameters
16
+ class Solr::Request::Select < Solr::Request::Base
17
+
18
+ attr_reader :query_type
19
+
20
+ def initialize(qt=nil, params={})
21
+ @query_type = qt
22
+ @select_params = params
23
+ end
24
+
25
+ def response_format
26
+ :ruby
27
+ end
28
+
29
+ def handler
30
+ 'select'
31
+ end
32
+
33
+ def content_type
34
+ 'application/x-www-form-urlencoded; charset=utf-8'
35
+ end
36
+
37
+ def to_hash
38
+ return {:qt => query_type, :wt => 'ruby'}.merge(@select_params)
39
+ end
40
+
41
+ def to_s
42
+ raw_params = self.to_hash
43
+
44
+ http_params = []
45
+ raw_params.each do |key,value|
46
+ if value.respond_to?(:each) && !value.is_a?(String)
47
+ value.each { |v| http_params << "#{key}=#{ERB::Util::url_encode(v)}" unless v.nil?}
48
+ else
49
+ http_params << "#{key}=#{ERB::Util::url_encode(value)}" unless value.nil?
50
+ end
51
+ end
52
+
53
+ http_params.join("&")
54
+ end
55
+
56
+ end
@@ -0,0 +1,30 @@
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
+ class Solr::Request::Spellcheck < Solr::Request::Select
14
+
15
+ def initialize(params)
16
+ super('spellchecker')
17
+ @params = params
18
+ end
19
+
20
+ def to_hash
21
+ hash = super
22
+ hash[:q] = @params[:query]
23
+ hash[:suggestionCount] = @params[:suggestion_count]
24
+ hash[:accuracy] = @params[:accuracy]
25
+ hash[:onlyMorePopular] = @params[:only_more_popular]
26
+ hash[:cmd] = @params[:command]
27
+ return hash
28
+ end
29
+
30
+ end