solrsan 0.0.30 → 0.0.32
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/Gemfile.lock +5 -5
- data/README.rdoc +112 -0
- data/lib/rails/generators/solrsan/config/config_generator.rb +11 -18
- data/lib/solrsan/search.rb +2 -2
- data/lib/solrsan/version.rb +1 -1
- data/test/unit/search_test.rb +24 -0
- metadata +9 -9
- data/README.markdown +0 -71
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
solrsan (0.0.
|
4
|
+
solrsan (0.0.31)
|
5
5
|
activemodel (~> 3.0.5)
|
6
6
|
activesupport (~> 3.0.5)
|
7
7
|
rsolr (~> 1.0.0)
|
@@ -9,11 +9,11 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
|
-
activemodel (3.0.
|
13
|
-
activesupport (= 3.0.
|
12
|
+
activemodel (3.0.7)
|
13
|
+
activesupport (= 3.0.7)
|
14
14
|
builder (~> 2.1.2)
|
15
|
-
i18n (~> 0.
|
16
|
-
activesupport (3.0.
|
15
|
+
i18n (~> 0.5.0)
|
16
|
+
activesupport (3.0.7)
|
17
17
|
builder (2.1.2)
|
18
18
|
i18n (0.5.0)
|
19
19
|
rsolr (1.0.0)
|
data/README.rdoc
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
= solrsan
|
2
|
+
|
3
|
+
http://github.com/tc/solrsan
|
4
|
+
|
5
|
+
This gem is a lightweight wrapper for the Apache Solr API.
|
6
|
+
|
7
|
+
Before you start, read the documentation for solr at http://wiki.apache.org/solr
|
8
|
+
|
9
|
+
It'll be invaluable for knowing parameters and error messages.
|
10
|
+
I made a few test cases for further examples at http://github.com/tc/solrsan/tree/master/test/unit
|
11
|
+
|
12
|
+
=== HOWTO
|
13
|
+
Install Jetty
|
14
|
+
|
15
|
+
wget http://download.eclipse.org/jetty/stable-7/dist/jetty-distribution-7.3.0.v20110203.tar.gz
|
16
|
+
tar -zxvf jetty-distribution-*.tar.gz
|
17
|
+
rm jetty-distribution-*.tar.gz
|
18
|
+
mv jetty-distribution-* /usr/local
|
19
|
+
ln -s jetty-distribution-* jetty
|
20
|
+
|
21
|
+
Install solr
|
22
|
+
|
23
|
+
|
24
|
+
wget http://www.ecoficial.com/apachemirror/lucene/solr/3.1.0/apache-solr-3.1.0.tgz
|
25
|
+
tar -zxvf apache-solr-*.tgz
|
26
|
+
cd apache-solr-*
|
27
|
+
cp dist/apache-solr-*.war /usr/local/jetty/webapps/solr.war
|
28
|
+
|
29
|
+
Add solrsan to your Ruby application's Gemfile:
|
30
|
+
gem "solrsan"
|
31
|
+
|
32
|
+
Create solr configuration files using:
|
33
|
+
rails generate solrsan:config
|
34
|
+
|
35
|
+
The generator will copy the following files into your application.
|
36
|
+
|
37
|
+
config/solr.yml
|
38
|
+
config/solr
|
39
|
+
config/initializers/solrsan.rb
|
40
|
+
lib/tasks/solr.rake
|
41
|
+
|
42
|
+
Edit the config/solr.yml for your directory paths.
|
43
|
+
|
44
|
+
The rake file will add these rake tasks:
|
45
|
+
|
46
|
+
rake solr:start
|
47
|
+
rake solr:stop
|
48
|
+
rake solr:clear_index
|
49
|
+
rake solr:index
|
50
|
+
|
51
|
+
you will need to alter clear_index/index to match your models
|
52
|
+
|
53
|
+
Deploy tasks via capistrano:
|
54
|
+
add to your deploy.rb
|
55
|
+
|
56
|
+
require 'solrsan/capistrano'
|
57
|
+
|
58
|
+
This will add the following methods which will just call the
|
59
|
+
corresponding rake tasks:
|
60
|
+
|
61
|
+
cap solr:start
|
62
|
+
cap solr:stop
|
63
|
+
cap solr:reindex
|
64
|
+
|
65
|
+
=== Indexing documents:
|
66
|
+
Edit config/solr/conf/schema.xml to state the types of fields you want
|
67
|
+
to index. You can use dynamic fields as well.
|
68
|
+
|
69
|
+
These fields are required for each solr document and are automatically
|
70
|
+
generated:
|
71
|
+
|
72
|
+
id, db_id, type
|
73
|
+
|
74
|
+
In your model, define as_solr_document and return a hash with specific fields.
|
75
|
+
|
76
|
+
|
77
|
+
class Document < ActiveRecord::Base
|
78
|
+
include Solrsan::Search
|
79
|
+
after_save :index
|
80
|
+
before_destroy :destroy_index_document
|
81
|
+
|
82
|
+
def as_solr_document
|
83
|
+
{:content => "hi"}
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
In each model, you can include a Solrsan::Search module which will include a few interface helper methods:
|
89
|
+
index
|
90
|
+
destroy_index_document
|
91
|
+
search(params)
|
92
|
+
|
93
|
+
=== Search:
|
94
|
+
A simple search query:
|
95
|
+
Document.search(:q => "hello world")
|
96
|
+
|
97
|
+
More searching examples can be seen in test/unit/search_test.rb
|
98
|
+
|
99
|
+
== Changelog
|
100
|
+
0.0.32
|
101
|
+
Using Hashwithindifferentaccess for request parsing.
|
102
|
+
|
103
|
+
0.0.31
|
104
|
+
Usable version!
|
105
|
+
|
106
|
+
0.0.1
|
107
|
+
First release.
|
108
|
+
|
109
|
+
== Copyright
|
110
|
+
|
111
|
+
Copyright (c) 2011 Tommy Chheng. See LICENSE for details.
|
112
|
+
|
@@ -3,28 +3,21 @@ require 'rails/generators/solrsan_generator'
|
|
3
3
|
module Solrsan
|
4
4
|
module Generators
|
5
5
|
class ConfigGenerator < Rails::Generators::Base
|
6
|
-
|
7
|
-
def self.source_root
|
8
|
-
File.expand_path("../templates", __FILE__)
|
9
|
-
end
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
10
7
|
|
11
|
-
|
12
|
-
template
|
13
|
-
template
|
14
|
-
|
8
|
+
def create_config_files
|
9
|
+
template("solrsan.rb", File.join("config", "initializers", "solrsan.rb"))
|
10
|
+
template("solr.yml", File.join("config", "solr.yml"))
|
11
|
+
end
|
15
12
|
|
16
13
|
def copy_solr_conf
|
17
|
-
|
18
|
-
destination = "config/solr/conf/#{File.basename(source)}"
|
19
|
-
FileUtils.rm(destination) if options[:force]
|
20
|
-
if File.exist?(destination)
|
21
|
-
puts "Skipping #{destination} because it already exists"
|
22
|
-
else
|
23
|
-
puts "Generating #{destination}"
|
24
|
-
FileUtils.cp(source, destination)
|
25
|
-
end
|
26
|
-
end
|
14
|
+
directory "../../../../../../config/solr", "config/solr", :recursive => true
|
27
15
|
end
|
16
|
+
|
17
|
+
def copy_rake_task
|
18
|
+
copy_file "../../../../../tasks/solr.rake", "lib/tasks/solr.rake"
|
19
|
+
end
|
20
|
+
|
28
21
|
end
|
29
22
|
end
|
30
23
|
end
|
data/lib/solrsan/search.rb
CHANGED
@@ -37,10 +37,10 @@ module Solrsan
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def parse_params_for_solr(search_params={})
|
40
|
-
solr_params = { :echoParams => 'explicit',
|
40
|
+
solr_params = HashWithIndifferentAccess.new({ :echoParams => 'explicit',
|
41
41
|
:q => "*:*",
|
42
42
|
:facet => "on",
|
43
|
-
:'facet.mincount' => 1}.merge(search_params)
|
43
|
+
:'facet.mincount' => 1}.merge(search_params))
|
44
44
|
solr_params[:hl] = true unless search_params[:'hl.fl'].blank?
|
45
45
|
solr_params[:fq] = ["type:#{class_name}"] + parse_fq(search_params[:fq])
|
46
46
|
solr_params
|
data/lib/solrsan/version.rb
CHANGED
data/test/unit/search_test.rb
CHANGED
@@ -85,6 +85,14 @@ class SearchTest < Test::Unit::TestCase
|
|
85
85
|
assert_equal expected, filters
|
86
86
|
end
|
87
87
|
|
88
|
+
def test_parse_fq_with_hash_multiple_entries
|
89
|
+
params = {:fq => {:tags => ["ruby", "scala"], :author => "Bert"}}
|
90
|
+
filters = Document.parse_fq(params[:fq])
|
91
|
+
|
92
|
+
expected = ["tags:\"ruby\"", "tags:\"scala\"", "author:\"Bert\""]
|
93
|
+
assert_equal expected, filters
|
94
|
+
end
|
95
|
+
|
88
96
|
def test_parse_fq_with_hash_array_args
|
89
97
|
params = {:fq => [{:tags => ["ruby", "scala"]}]}
|
90
98
|
filters = Document.parse_fq(params[:fq])
|
@@ -115,6 +123,22 @@ class SearchTest < Test::Unit::TestCase
|
|
115
123
|
assert_equal expected, filters
|
116
124
|
end
|
117
125
|
|
126
|
+
|
127
|
+
def test_filter_query_mulitple_filters
|
128
|
+
Document.index(Document.new(:id => 3, :author => "Bert", :title => "solr lucene",:review_count => 10, :tags => ['ruby']))
|
129
|
+
Document.index(Document.new(:id => 4, :author => "Ernie", :title => "lucene solr", :review_count => 5, :tags => ['ruby', 'scala']))
|
130
|
+
|
131
|
+
response = Document.search(:q => "solr", :fq => {:tags => ["scala"], :author => "Ernie"})
|
132
|
+
docs = response[:docs]
|
133
|
+
metadata = response[:metadata]
|
134
|
+
|
135
|
+
assert_equal 1, metadata[:total_count]
|
136
|
+
|
137
|
+
doc = docs.first
|
138
|
+
assert_not_nil doc['tags']
|
139
|
+
assert doc['tags'].include?("scala")
|
140
|
+
end
|
141
|
+
|
118
142
|
def test_filter_query
|
119
143
|
Document.index(Document.new(:id => 3, :author => "Bert", :title => "solr lucene",:review_count => 10, :tags => ['ruby']))
|
120
144
|
Document.index(Document.new(:id => 4, :author => "Ernie", :title => "lucene solr", :review_count => 5, :tags => ['ruby', 'scala']))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solrsan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.32
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-05-03 00:00:00.000000000 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|
17
|
-
requirement: &
|
17
|
+
requirement: &2156388680 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 1.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2156388680
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activemodel
|
28
|
-
requirement: &
|
28
|
+
requirement: &2156388180 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 3.0.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2156388180
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: activesupport
|
39
|
-
requirement: &
|
39
|
+
requirement: &2156404100 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
version: 3.0.5
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2156404100
|
48
48
|
description: solrsan is a lightweight wrapper for using Apache Solr within a Ruby
|
49
49
|
application including Rails and Sinatra.
|
50
50
|
email:
|
@@ -57,7 +57,7 @@ files:
|
|
57
57
|
- Gemfile
|
58
58
|
- Gemfile.lock
|
59
59
|
- LICENSE
|
60
|
-
- README.
|
60
|
+
- README.rdoc
|
61
61
|
- Rakefile
|
62
62
|
- config/solr.yml
|
63
63
|
- config/solr.yml.example
|
data/README.markdown
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
# solrsan
|
2
|
-
This gem is a lightweight wrapper for the Apache Solr API.
|
3
|
-
|
4
|
-
Before you start, read the documentation for solr at http://wiki.apache.org/solr/
|
5
|
-
|
6
|
-
It'll be invaluable for knowing parameters and error messages. I made a few test cases for further examples at http://github.com/tc/solrsan/tree/master/test/
|
7
|
-
|
8
|
-
## HOWTO
|
9
|
-
Install jetty:
|
10
|
-
Download jetty 7 from http://download.eclipse.org/jetty/stable-7/dist/
|
11
|
-
|
12
|
-
Install solr:
|
13
|
-
Download solr from http://www.apache.org/dyn/closer.cgi/lucene/solr/
|
14
|
-
Unzip the jar file:
|
15
|
-
tar -zxvf apache-solr-*.jar
|
16
|
-
|
17
|
-
Copy dist/apache-solr-*.war into jetty's webapps directory as solr.war:
|
18
|
-
cd apache-solr-*
|
19
|
-
cp dist/apache-solr-*.war JETTY_PATH/webapps/solr.war
|
20
|
-
|
21
|
-
Create solrsan and solr configuration files using:
|
22
|
-
rails generate Solrsan:Config
|
23
|
-
|
24
|
-
The generator will copy the following files into your application.
|
25
|
-
config/solr.yml
|
26
|
-
config/solr
|
27
|
-
config/initializers/solrsan.rb
|
28
|
-
lib/tasks/solr.rake
|
29
|
-
|
30
|
-
The rake file will add
|
31
|
-
rake solr:start
|
32
|
-
rake solr:stop
|
33
|
-
rake solr:clear_index
|
34
|
-
rake solr:index
|
35
|
-
#you will need to alter clear_index/index to match your models
|
36
|
-
|
37
|
-
Deploy tasks via capistrano:
|
38
|
-
add to your deploy.rb
|
39
|
-
require 'solrsan/capistrano'
|
40
|
-
|
41
|
-
This will add the following methods which will just call the
|
42
|
-
corresponding rake tasks:
|
43
|
-
cap solr:start
|
44
|
-
cap solr:stop
|
45
|
-
cap solr:reindex
|
46
|
-
|
47
|
-
##
|
48
|
-
The fields are required for each solr document:
|
49
|
-
id, db_id, type
|
50
|
-
|
51
|
-
In each model, you can include a Solrsan::Search module which will include a few interface helper methods:
|
52
|
-
index
|
53
|
-
destroy_index_document
|
54
|
-
search(params)
|
55
|
-
|
56
|
-
You can also add hooks for thse methods:
|
57
|
-
class Document < ActiveRecord::Base
|
58
|
-
include Solrsan::Search
|
59
|
-
after_save :index
|
60
|
-
before_destroy :destroy_index_document
|
61
|
-
end
|
62
|
-
|
63
|
-
---
|
64
|
-
## Changelog
|
65
|
-
0.0.1
|
66
|
-
First release.
|
67
|
-
|
68
|
-
## Copyright
|
69
|
-
|
70
|
-
Copyright (c) 2011 Tommy Chheng. See LICENSE for details.
|
71
|
-
|