greglu-solr-ruby 0.0.7
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/CHANGES.yml +50 -0
- data/LICENSE.txt +201 -0
- data/README +56 -0
- data/Rakefile +190 -0
- data/examples/delicious_library/dl_importer.rb +60 -0
- data/examples/delicious_library/sample_export.txt +164 -0
- data/examples/marc/marc_importer.rb +106 -0
- data/examples/tang/tang_importer.rb +58 -0
- data/lib/solr.rb +21 -0
- data/lib/solr/connection.rb +179 -0
- data/lib/solr/document.rb +73 -0
- data/lib/solr/exception.rb +13 -0
- data/lib/solr/field.rb +39 -0
- data/lib/solr/importer.rb +19 -0
- data/lib/solr/importer/array_mapper.rb +26 -0
- data/lib/solr/importer/delimited_file_source.rb +38 -0
- data/lib/solr/importer/hpricot_mapper.rb +27 -0
- data/lib/solr/importer/mapper.rb +51 -0
- data/lib/solr/importer/solr_source.rb +43 -0
- data/lib/solr/importer/xpath_mapper.rb +35 -0
- data/lib/solr/indexer.rb +52 -0
- data/lib/solr/request.rb +26 -0
- data/lib/solr/request/add_document.rb +63 -0
- data/lib/solr/request/base.rb +36 -0
- data/lib/solr/request/commit.rb +31 -0
- data/lib/solr/request/delete.rb +50 -0
- data/lib/solr/request/dismax.rb +46 -0
- data/lib/solr/request/index_info.rb +22 -0
- data/lib/solr/request/modify_document.rb +51 -0
- data/lib/solr/request/optimize.rb +21 -0
- data/lib/solr/request/ping.rb +36 -0
- data/lib/solr/request/select.rb +56 -0
- data/lib/solr/request/spellcheck.rb +30 -0
- data/lib/solr/request/standard.rb +374 -0
- data/lib/solr/request/update.rb +23 -0
- data/lib/solr/response.rb +27 -0
- data/lib/solr/response/add_document.rb +17 -0
- data/lib/solr/response/base.rb +42 -0
- data/lib/solr/response/commit.rb +17 -0
- data/lib/solr/response/delete.rb +13 -0
- data/lib/solr/response/dismax.rb +20 -0
- data/lib/solr/response/index_info.rb +26 -0
- data/lib/solr/response/modify_document.rb +17 -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/select.rb +17 -0
- data/lib/solr/response/spellcheck.rb +20 -0
- data/lib/solr/response/standard.rb +60 -0
- data/lib/solr/response/xml.rb +42 -0
- data/lib/solr/solrtasks.rb +27 -0
- data/lib/solr/util.rb +32 -0
- data/lib/solr/xml.rb +47 -0
- data/script/setup.rb +14 -0
- data/script/solrshell +18 -0
- data/solr-ruby.gemspec +26 -0
- data/solr/conf/admin-extra.html +31 -0
- data/solr/conf/protwords.txt +21 -0
- data/solr/conf/schema.xml +221 -0
- data/solr/conf/scripts.conf +24 -0
- data/solr/conf/solrconfig.xml +394 -0
- data/solr/conf/stopwords.txt +58 -0
- data/solr/conf/synonyms.txt +31 -0
- data/solr/conf/xslt/example.xsl +132 -0
- data/test/conf/admin-extra.html +31 -0
- data/test/conf/protwords.txt +21 -0
- data/test/conf/schema.xml +237 -0
- data/test/conf/scripts.conf +24 -0
- data/test/conf/solrconfig.xml +376 -0
- data/test/conf/stopwords.txt +58 -0
- data/test/conf/synonyms.txt +31 -0
- data/test/functional/server_test.rb +218 -0
- data/test/functional/test_solr_server.rb +104 -0
- data/test/unit/add_document_test.rb +40 -0
- data/test/unit/array_mapper_test.rb +37 -0
- data/test/unit/changes_yaml_test.rb +21 -0
- data/test/unit/commit_test.rb +41 -0
- data/test/unit/connection_test.rb +55 -0
- data/test/unit/data_mapper_test.rb +75 -0
- data/test/unit/delete_test.rb +56 -0
- data/test/unit/delimited_file_source_test.rb +29 -0
- data/test/unit/dismax_request_test.rb +26 -0
- data/test/unit/document_test.rb +69 -0
- data/test/unit/field_test.rb +48 -0
- data/test/unit/hpricot_mapper_test.rb +44 -0
- data/test/unit/hpricot_test_file.xml +26 -0
- data/test/unit/indexer_test.rb +57 -0
- data/test/unit/modify_document_test.rb +24 -0
- data/test/unit/ping_test.rb +51 -0
- data/test/unit/request_test.rb +61 -0
- data/test/unit/response_test.rb +43 -0
- data/test/unit/select_test.rb +25 -0
- data/test/unit/solr_mock_base.rb +40 -0
- data/test/unit/spellcheck_response_test.rb +26 -0
- data/test/unit/spellchecker_request_test.rb +27 -0
- data/test/unit/standard_request_test.rb +324 -0
- data/test/unit/standard_response_test.rb +174 -0
- data/test/unit/suite.rb +16 -0
- data/test/unit/tab_delimited.txt +2 -0
- data/test/unit/util_test.rb +24 -0
- data/test/unit/xpath_mapper_test.rb +38 -0
- data/test/unit/xpath_test_file.xml +25 -0
- metadata +173 -0
|
@@ -0,0 +1,17 @@
|
|
|
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 'rexml/xpath'
|
|
14
|
+
|
|
15
|
+
class Solr::Response::Commit < Solr::Response::Xml
|
|
16
|
+
end
|
|
17
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
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::Response::Delete < Solr::Response::Xml; end
|
|
@@ -0,0 +1,20 @@
|
|
|
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::Response::Dismax < Solr::Response::Standard
|
|
14
|
+
# no need for special processing
|
|
15
|
+
|
|
16
|
+
# FIXME: 2007-02-07 <coda.hale@gmail.com> -- The existence of this class indicates that
|
|
17
|
+
# the Request/Response pair architecture is a little hinky. Perhaps we could refactor
|
|
18
|
+
# out some of the most common functionality -- Common Query Parameters, Highlighting Parameters,
|
|
19
|
+
# Simple Facet Parameters, etc. -- into modules?
|
|
20
|
+
end
|
|
@@ -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
|
+
class Solr::Response::IndexInfo < Solr::Response::Ruby
|
|
14
|
+
def initialize(ruby_code)
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def num_docs
|
|
19
|
+
return @data['index']['numDocs']
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def field_names
|
|
23
|
+
return @data['fields'].keys
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
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::Response::ModifyDocument < Solr::Response::Xml
|
|
14
|
+
def initialize(xml)
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
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::Response::Optimize < Solr::Response::Commit
|
|
14
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
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 'rexml/xpath'
|
|
14
|
+
|
|
15
|
+
class Solr::Response::Ping < Solr::Response::Xml
|
|
16
|
+
|
|
17
|
+
def initialize(xml)
|
|
18
|
+
super
|
|
19
|
+
@ok = REXML::XPath.first(@doc, './solr/ping') ? true : false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# returns true or false depending on whether the ping
|
|
23
|
+
# was successful or not
|
|
24
|
+
def ok?
|
|
25
|
+
@ok
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
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
|
+
class Solr::Response::Ruby < Solr::Response::Base
|
|
14
|
+
attr_reader :data, :header
|
|
15
|
+
|
|
16
|
+
def initialize(ruby_code)
|
|
17
|
+
super
|
|
18
|
+
begin
|
|
19
|
+
#TODO: what about pulling up data/header/response to ResponseBase,
|
|
20
|
+
# or maybe a new middle class like SelectResponseBase since
|
|
21
|
+
# all Select queries return this same sort of stuff??
|
|
22
|
+
# XML (&wt=xml) and Ruby (&wt=ruby) responses contain exactly the same structure.
|
|
23
|
+
# a goal of solrb is to make it irrelevant which gets used under the hood,
|
|
24
|
+
# but favor Ruby responses.
|
|
25
|
+
@data = eval(ruby_code)
|
|
26
|
+
@header = @data['responseHeader']
|
|
27
|
+
raise "response should be a hash" unless @data.kind_of? Hash
|
|
28
|
+
raise "response header missing" unless @header.kind_of? Hash
|
|
29
|
+
rescue SyntaxError => e
|
|
30
|
+
raise Solr::Exception.new("invalid ruby code: #{e}")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def ok?
|
|
35
|
+
@header['status'] == 0
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def query_time
|
|
39
|
+
@header['QTime']
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
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::Response::Select < Solr::Response::Ruby
|
|
14
|
+
def initialize(ruby_code)
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
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::Response::Spellcheck < Solr::Response::Ruby
|
|
14
|
+
attr_reader :suggestions
|
|
15
|
+
|
|
16
|
+
def initialize(ruby_code)
|
|
17
|
+
super
|
|
18
|
+
@suggestions = @data['suggestions']
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
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::Response::Standard < Solr::Response::Ruby
|
|
14
|
+
FacetValue = Struct.new(:name, :value)
|
|
15
|
+
include Enumerable
|
|
16
|
+
|
|
17
|
+
def initialize(ruby_code)
|
|
18
|
+
super
|
|
19
|
+
@response = @data['response']
|
|
20
|
+
raise "response section missing" unless @response.kind_of? Hash
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def total_hits
|
|
24
|
+
@response['numFound']
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def start
|
|
28
|
+
@response['start']
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def hits
|
|
32
|
+
@response['docs']
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def max_score
|
|
36
|
+
@response['maxScore']
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# TODO: consider the use of json.nl parameter
|
|
40
|
+
def field_facets(field)
|
|
41
|
+
facets = []
|
|
42
|
+
values = @data['facet_counts']['facet_fields'][field]
|
|
43
|
+
Solr::Util.paired_array_each(values) do |key, value|
|
|
44
|
+
facets << FacetValue.new(key, value)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
facets
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def highlighted(id, field)
|
|
51
|
+
@data['highlighting'][id.to_s][field.to_s] rescue nil
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# supports enumeration of hits
|
|
55
|
+
# TODO revisit - should this iterate through *all* hits by re-requesting more?
|
|
56
|
+
def each
|
|
57
|
+
@response['docs'].each {|hit| yield hit}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
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 'rexml/document'
|
|
14
|
+
require 'solr/exception'
|
|
15
|
+
|
|
16
|
+
class Solr::Response::Xml < Solr::Response::Base
|
|
17
|
+
attr_reader :doc, :status_code, :status_message
|
|
18
|
+
|
|
19
|
+
def initialize(xml)
|
|
20
|
+
super
|
|
21
|
+
# parse the xml
|
|
22
|
+
@doc = REXML::Document.new(xml)
|
|
23
|
+
|
|
24
|
+
# look for the result code and string
|
|
25
|
+
# <?xml version="1.0" encoding="UTF-8"?>
|
|
26
|
+
# <response>
|
|
27
|
+
# <lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst>
|
|
28
|
+
# </response>
|
|
29
|
+
result = REXML::XPath.first(@doc, './response/lst[@name="responseHeader"]/int[@name="status"]')
|
|
30
|
+
if result
|
|
31
|
+
@status_code = result.text
|
|
32
|
+
@status_message = result.text # TODO: any need for a message?
|
|
33
|
+
end
|
|
34
|
+
rescue REXML::ParseException => e
|
|
35
|
+
raise Solr::Exception.new("invalid response xml: #{e}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def ok?
|
|
39
|
+
return @status_code == '0'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
3
|
+
# (the "License"); you may not use this file except in compliance with
|
|
4
|
+
# the License. You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
|
|
14
|
+
# TODO: fill out Solr tasks: start, stop, ping, optimize, etc.
|
|
15
|
+
|
|
16
|
+
require 'rake'
|
|
17
|
+
require 'rake/tasklib'
|
|
18
|
+
|
|
19
|
+
module Solr
|
|
20
|
+
namespace :solr do
|
|
21
|
+
desc "Start Solr"
|
|
22
|
+
task :start do
|
|
23
|
+
# TODO: actually start it up!
|
|
24
|
+
puts "Starting..."
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/solr/util.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
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::Util
|
|
14
|
+
# paired_array_each([key1,value1,key2,value2]) yields twice:
|
|
15
|
+
# |key1,value1| and |key2,value2|
|
|
16
|
+
def self.paired_array_each(a, &block)
|
|
17
|
+
0.upto(a.size / 2 - 1) do |i|
|
|
18
|
+
n = i * 2
|
|
19
|
+
yield(a[n], a[n+1])
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# paired_array_to_hash([key1,value1,key2,value2]) => {key1 => value1, key2, value2}
|
|
24
|
+
def self.paired_array_to_hash(a)
|
|
25
|
+
Hash[*a]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.query_parser_escape(string)
|
|
29
|
+
# backslash prefix everything that isn't a word character
|
|
30
|
+
string.gsub(/(\W)/,'\\\\\1')
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/solr/xml.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
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::XML
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
begin
|
|
17
|
+
|
|
18
|
+
# If we can load rubygems and libxml-ruby...
|
|
19
|
+
require 'rubygems'
|
|
20
|
+
require 'xml/libxml'
|
|
21
|
+
|
|
22
|
+
# then make a few modifications to XML::Node so it can stand in for REXML::Element
|
|
23
|
+
class XML::Node
|
|
24
|
+
# element.add_element(another_element) should work
|
|
25
|
+
alias_method :add_element, :<<
|
|
26
|
+
|
|
27
|
+
# element.attributes['blah'] should work
|
|
28
|
+
def attributes
|
|
29
|
+
self
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# element.text = "blah" should work
|
|
33
|
+
def text=(x)
|
|
34
|
+
self << x.to_s
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# And use XML::Node for our XML generation
|
|
39
|
+
Solr::XML::Element = XML::Node
|
|
40
|
+
|
|
41
|
+
rescue LoadError => e # If we can't load either rubygems or libxml-ruby
|
|
42
|
+
|
|
43
|
+
# Just use REXML.
|
|
44
|
+
require 'rexml/document'
|
|
45
|
+
Solr::XML::Element = REXML::Element
|
|
46
|
+
|
|
47
|
+
end
|