nxa-sunspot 0.10.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.
Files changed (142) hide show
  1. data/History.txt +153 -0
  2. data/LICENSE +18 -0
  3. data/README.rdoc +191 -0
  4. data/Rakefile +9 -0
  5. data/TODO +14 -0
  6. data/VERSION.yml +4 -0
  7. data/bin/sunspot-configure-solr +40 -0
  8. data/bin/sunspot-solr +95 -0
  9. data/lib/light_config.rb +40 -0
  10. data/lib/sunspot.rb +488 -0
  11. data/lib/sunspot/adapters.rb +265 -0
  12. data/lib/sunspot/composite_setup.rb +188 -0
  13. data/lib/sunspot/configuration.rb +56 -0
  14. data/lib/sunspot/data_extractor.rb +50 -0
  15. data/lib/sunspot/dsl.rb +4 -0
  16. data/lib/sunspot/dsl/field_query.rb +150 -0
  17. data/lib/sunspot/dsl/fields.rb +100 -0
  18. data/lib/sunspot/dsl/fulltext.rb +228 -0
  19. data/lib/sunspot/dsl/query.rb +162 -0
  20. data/lib/sunspot/dsl/query_facet.rb +36 -0
  21. data/lib/sunspot/dsl/restriction.rb +25 -0
  22. data/lib/sunspot/dsl/scope.rb +225 -0
  23. data/lib/sunspot/dsl/search.rb +30 -0
  24. data/lib/sunspot/field.rb +181 -0
  25. data/lib/sunspot/field_factory.rb +144 -0
  26. data/lib/sunspot/indexer.rb +133 -0
  27. data/lib/sunspot/query.rb +9 -0
  28. data/lib/sunspot/query/abstract_field_facet.rb +43 -0
  29. data/lib/sunspot/query/boost_query.rb +20 -0
  30. data/lib/sunspot/query/connective.rb +189 -0
  31. data/lib/sunspot/query/date_field_facet.rb +14 -0
  32. data/lib/sunspot/query/dismax.rb +88 -0
  33. data/lib/sunspot/query/field_facet.rb +9 -0
  34. data/lib/sunspot/query/highlighting.rb +55 -0
  35. data/lib/sunspot/query/local.rb +27 -0
  36. data/lib/sunspot/query/pagination.rb +38 -0
  37. data/lib/sunspot/query/query.rb +86 -0
  38. data/lib/sunspot/query/query_facet.rb +16 -0
  39. data/lib/sunspot/query/restriction.rb +254 -0
  40. data/lib/sunspot/query/scope.rb +9 -0
  41. data/lib/sunspot/query/sort.rb +105 -0
  42. data/lib/sunspot/query/sort_composite.rb +33 -0
  43. data/lib/sunspot/query/text_field_boost.rb +15 -0
  44. data/lib/sunspot/schema.rb +147 -0
  45. data/lib/sunspot/search.rb +216 -0
  46. data/lib/sunspot/search/date_facet.rb +35 -0
  47. data/lib/sunspot/search/facet_row.rb +27 -0
  48. data/lib/sunspot/search/field_facet.rb +44 -0
  49. data/lib/sunspot/search/highlight.rb +38 -0
  50. data/lib/sunspot/search/hit.rb +117 -0
  51. data/lib/sunspot/search/query_facet.rb +62 -0
  52. data/lib/sunspot/session.rb +236 -0
  53. data/lib/sunspot/setup.rb +323 -0
  54. data/lib/sunspot/text_field_setup.rb +29 -0
  55. data/lib/sunspot/type.rb +204 -0
  56. data/lib/sunspot/util.rb +210 -0
  57. data/solr/etc/jetty.xml +212 -0
  58. data/solr/etc/webdefault.xml +379 -0
  59. data/solr/lib/jetty-6.1.3.jar +0 -0
  60. data/solr/lib/jetty-util-6.1.3.jar +0 -0
  61. data/solr/lib/jsp-2.1/ant-1.6.5.jar +0 -0
  62. data/solr/lib/jsp-2.1/core-3.1.1.jar +0 -0
  63. data/solr/lib/jsp-2.1/jsp-2.1.jar +0 -0
  64. data/solr/lib/jsp-2.1/jsp-api-2.1.jar +0 -0
  65. data/solr/lib/servlet-api-2.5-6.1.3.jar +0 -0
  66. data/solr/solr/conf/elevate.xml +36 -0
  67. data/solr/solr/conf/protwords.txt +21 -0
  68. data/solr/solr/conf/schema.xml +64 -0
  69. data/solr/solr/conf/solrconfig.xml +725 -0
  70. data/solr/solr/conf/stopwords.txt +57 -0
  71. data/solr/solr/conf/synonyms.txt +31 -0
  72. data/solr/solr/lib/geoapi-nogenerics-2.1-M2.jar +0 -0
  73. data/solr/solr/lib/gt2-referencing-2.3.1.jar +0 -0
  74. data/solr/solr/lib/jsr108-0.01.jar +0 -0
  75. data/solr/solr/lib/locallucene.jar +0 -0
  76. data/solr/solr/lib/localsolr.jar +0 -0
  77. data/solr/start.jar +0 -0
  78. data/solr/webapps/solr.war +0 -0
  79. data/spec/api/adapters_spec.rb +33 -0
  80. data/spec/api/indexer/attributes_spec.rb +110 -0
  81. data/spec/api/indexer/batch_spec.rb +46 -0
  82. data/spec/api/indexer/dynamic_fields_spec.rb +33 -0
  83. data/spec/api/indexer/fixed_fields_spec.rb +57 -0
  84. data/spec/api/indexer/fulltext_spec.rb +43 -0
  85. data/spec/api/indexer/removal_spec.rb +46 -0
  86. data/spec/api/indexer/spec_helper.rb +1 -0
  87. data/spec/api/indexer_spec.rb +4 -0
  88. data/spec/api/query/adjust_params_spec.rb +37 -0
  89. data/spec/api/query/connectives_spec.rb +176 -0
  90. data/spec/api/query/dsl_spec.rb +12 -0
  91. data/spec/api/query/dynamic_fields_spec.rb +149 -0
  92. data/spec/api/query/faceting_spec.rb +296 -0
  93. data/spec/api/query/fulltext_spec.rb +281 -0
  94. data/spec/api/query/highlighting_spec.rb +225 -0
  95. data/spec/api/query/local_spec.rb +62 -0
  96. data/spec/api/query/ordering_pagination_spec.rb +95 -0
  97. data/spec/api/query/scope_spec.rb +266 -0
  98. data/spec/api/query/spec_helper.rb +1 -0
  99. data/spec/api/query/text_field_scoping_spec.rb +30 -0
  100. data/spec/api/query/types_spec.rb +20 -0
  101. data/spec/api/search/dynamic_fields_spec.rb +27 -0
  102. data/spec/api/search/faceting_spec.rb +242 -0
  103. data/spec/api/search/highlighting_spec.rb +65 -0
  104. data/spec/api/search/hits_spec.rb +67 -0
  105. data/spec/api/search/results_spec.rb +52 -0
  106. data/spec/api/search/search_spec.rb +23 -0
  107. data/spec/api/search/spec_helper.rb +1 -0
  108. data/spec/api/session_spec.rb +198 -0
  109. data/spec/api/spec_helper.rb +1 -0
  110. data/spec/api/sunspot_spec.rb +18 -0
  111. data/spec/helpers/indexer_helper.rb +29 -0
  112. data/spec/helpers/query_helper.rb +13 -0
  113. data/spec/helpers/search_helper.rb +78 -0
  114. data/spec/integration/dynamic_fields_spec.rb +55 -0
  115. data/spec/integration/faceting_spec.rb +188 -0
  116. data/spec/integration/highlighting_spec.rb +22 -0
  117. data/spec/integration/indexing_spec.rb +7 -0
  118. data/spec/integration/keyword_search_spec.rb +245 -0
  119. data/spec/integration/local_search_spec.rb +56 -0
  120. data/spec/integration/scoped_search_spec.rb +303 -0
  121. data/spec/integration/spec_helper.rb +7 -0
  122. data/spec/integration/stored_fields_spec.rb +10 -0
  123. data/spec/integration/test_pagination.rb +32 -0
  124. data/spec/mocks/adapters.rb +32 -0
  125. data/spec/mocks/blog.rb +3 -0
  126. data/spec/mocks/comment.rb +19 -0
  127. data/spec/mocks/connection.rb +106 -0
  128. data/spec/mocks/mock_adapter.rb +30 -0
  129. data/spec/mocks/mock_record.rb +48 -0
  130. data/spec/mocks/photo.rb +11 -0
  131. data/spec/mocks/post.rb +75 -0
  132. data/spec/mocks/super_class.rb +2 -0
  133. data/spec/mocks/user.rb +8 -0
  134. data/spec/spec_helper.rb +68 -0
  135. data/tasks/gemspec.rake +42 -0
  136. data/tasks/rcov.rake +28 -0
  137. data/tasks/rdoc.rake +22 -0
  138. data/tasks/schema.rake +19 -0
  139. data/tasks/spec.rake +24 -0
  140. data/tasks/todo.rake +4 -0
  141. data/templates/schema.xml.erb +36 -0
  142. metadata +319 -0
@@ -0,0 +1,153 @@
1
+ == 0.10.7 2009-11-16
2
+ * Ignore boost_fields that don't apply
3
+ * Ability to specify text_fields inside connectives
4
+ * Fix bug with newlines in strings incorrectly being considered multi-value
5
+ * Compatibility with RSolr 0.10.1
6
+ * Remove commented-out code entirely
7
+
8
+ == 0.10.6 2009-11-05
9
+ * Support more dismax parameters
10
+ * Support multiple boost queries
11
+ * Allow "extra" facet rows
12
+ * Allow exclusion of fulltext fields
13
+ * Allow specification of per-field highlighting params
14
+ * Specify coordinates using block extraction
15
+ * Return empty array if no highlights available
16
+ * Get stored text fields from hits
17
+ * Update docs to reflect a requirement of at least one search type
18
+ * added --max-memory and --min-memory parameters to sunspot-solr
19
+ * LocalLucene and LocalSolr compatible with Java 1.5
20
+
21
+ == 0.10.5 2009-10-22
22
+ * Fix highlighting for multiple-model search
23
+
24
+ == 0.10.4 2009-10-20
25
+ * Add adjust_params method, allowing experts to manually edit Solr params
26
+ * Track adds and deletes separately in session, and expose delete_dirty? method
27
+ * Allow clients to inject a singleton session proxy
28
+
29
+ == 0.10.3 2009-10-15
30
+ * Contiguous, not continuous
31
+ * Fail fast if less-than-1 radius passed for local search
32
+
33
+ == 0.10.2 2009-10-09
34
+ * Add Sunspot.config.xml_builder option, which is passed to RSolr
35
+
36
+ == 0.10.1 2009-10-08
37
+ * Fix directory bugs in sunspot-solr executable
38
+
39
+ == 0.10.0 2009-10-08
40
+ * Support for geographical search using LocalSolr
41
+ * Support for keyword highlighting, with custom deferred formatting
42
+ * New fulltext DSL for specifying advanced dismax options
43
+ * Support boost queries
44
+ * Support for search-time field boost
45
+ * Support for phrase fields
46
+ * Support for prefix queries
47
+ * Set default search-time field boost in setup
48
+ * Restrict field facet to a set of desired values
49
+ * Query facets support all facet options
50
+ * Allow scoping by text fields
51
+ * Support executing searches repeatedly
52
+ * Allow setting of Solr URL for integration tests in environment variable
53
+ * Add support for master/slave configurations
54
+ * Added logging options to sunspot-solr executable
55
+ * Added default solr config file location to Sunspot::Configuration
56
+ * Informative, non-firehose Search#inspect
57
+ * No longer require arguments to #paginate
58
+ * Silently ignore keyword calls with nil/blank/whitespace keywords
59
+ * Don't require that all searched types have a referenced field
60
+ * Correct backwards ranges
61
+ * Raise descriptive error if no types passed to search
62
+ * Handle empty query facets, query facet rows, and connectives
63
+ * Quote values in range restrictions if they contain spaces
64
+ * Fix bug in Sunspot::Util.full_const_get
65
+ * Remove support for :other option in time faceting
66
+ * Remove order_by_random() method
67
+ * Removed options and Query from public API
68
+ * Use built-in optparse instead of optiflag in bin/sunspot-solr
69
+ * Remove dependency on haml and use erb since it is only used to generate one file
70
+
71
+ == 0.9.0 2009-07-21
72
+ * Use Dismax parser for keyword search
73
+ * Field and document boosting
74
+ * Specify which fields to search in keyword search
75
+ * Allow indexing of multiple values in text fields
76
+ * Access keyword relevance score in Hit objects
77
+ * Allow stored fields, retrieve stored values from Hit objects
78
+ * Support more values in shorthand restrictions
79
+ * Disjunctions and conjunctions
80
+ * Random ordering
81
+ * Control all options for field facets
82
+ * Time range facets
83
+ * Get referenced objects from facets on foreign keys
84
+ * Facet by class
85
+ * Batch indexing
86
+ * New Date field type
87
+ * Direct access to data accessors
88
+ * Executable to configure production Solr instances
89
+ * Replace solr-ruby with RSolr
90
+ * Remove accidental ActiveSupport dependency
91
+
92
+ == 0.8.9 2009-06-23
93
+ * Fix OrderedHash bug in older versions of ActiveSupport
94
+
95
+ == 0.8.8 2009-06-15
96
+ * Escape type names to support namespaced classes
97
+ * Fix bug with anonymous modules in Ruby 1.9
98
+
99
+ == 0.8.7 2009-06-10
100
+ * Add --pid-dir option for sunspot-solr executable
101
+
102
+ == 0.8.5 2009-06-09
103
+ * Added dependencies for sunspot-solr executable to gem dependencies
104
+ * Search for adapters using class ancestors rather than superclasses
105
+
106
+ == 0.8.3 2009-06-03
107
+ * Index objects passed as a collection in a single HTTP request
108
+
109
+ == 0.8.2 2009-05-27
110
+ * Allow specification of Solr home when using sunspot-solr
111
+
112
+ == 0.8.1 2009-05-26
113
+ * Add Search#execute! to public API
114
+
115
+ == 0.8.0 2009-05-22
116
+ * Access query API directly; instantiate search without running it
117
+ * Dynamic fields
118
+ * Search blocks can be evaluated in calling context
119
+
120
+ == 0.7.3 2009-05-06
121
+ * Better exception handling when class doesn't have adapter/setup
122
+
123
+ == 0.7.2 2009-04-29
124
+ * Dirty sessions
125
+
126
+ == 0.7.1 2009-04-29
127
+ * Removed extlib dependency from gemspec
128
+
129
+ == 0.7.0 2009-04-28
130
+ * Less magic in the DSL
131
+ * Restrict by empty values
132
+ * Negative scoping using without() method
133
+ * Exclusion by object identity using without(instance)
134
+ * Support for faceting
135
+ * Explicit commits
136
+ * Boolean field type
137
+ * Attribute field flexibility
138
+ * Virtual field blocks can be evaluated in calling context
139
+ * Order available by multiple fields
140
+ * New adapter API
141
+ * Got rid of builder API
142
+ * Full documentation
143
+
144
+ == 0.0.2 2009-02-14
145
+ * Run sunspot's built-in Solr instance using
146
+ sunspot-solr executable
147
+ * Search hash interpretation delegated to
148
+ Builder object
149
+
150
+ == 0.0.1 2008-12-11
151
+ * Initial release
152
+ * Define indexing for any class using DSL
153
+ * Search indexed classes using DSL
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Permission is hereby granted, free of charge, to any person obtaining
2
+ a copy of this software and associated documentation files (the
3
+ 'Software'), to deal in the Software without restriction, including
4
+ without limitation the rights to use, copy, modify, merge, publish,
5
+ distribute, sublicense, and/or sell copies of the Software, and to
6
+ permit persons to whom the Software is furnished to do so, subject to
7
+ the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be
10
+ included in all copies or substantial portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
13
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
15
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
16
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
17
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
18
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,191 @@
1
+ = Sunspot
2
+
3
+ http://outoftime.github.com/sunspot
4
+
5
+ Sunspot is a Ruby library for expressive, powerful interaction with the Solr search engine.
6
+ Sunspot is built on top of the RSolr gem, which provides a low-level interface for Solr
7
+ interaction; Sunspot provides a simple, intuitive, expressive DSL backed by powerful
8
+ features for indexing objects and searching for them.
9
+
10
+ Sunspot is designed to be easily plugged in to any ORM, or even non-database-backed
11
+ objects such as the filesystem.
12
+
13
+ This README is intended as a quick primer on what Sunspot is capable of; for
14
+ detailed treatment of Sunspot's full feature range, check out the wiki:
15
+ http://wiki.github.com/outoftime/sunspot
16
+
17
+
18
+ === Features:
19
+
20
+ * Define indexing strategy for each searchable class using intuitive block-based API
21
+ * Clean separation between keyword-searchable fields and fields for scoping/ordering
22
+ * Define fields based on existing attributes or "virtual fields" for custom indexing
23
+ * Indexes each object's entire superclass hierarchy, for easy searching for all objects inheriting from a parent class
24
+ * Intuitive DSL for scoping searches, with all the usual boolean operators available
25
+ * Intuitive interface for requesting facets on indexed fields
26
+ * Extensible adapter architecture for easy integration of other ORMs or non-model classes
27
+ * Refine search using field facets, date range facets, or ultra-powerful query facets
28
+ * Full compatibility with will_paginate
29
+ * Ordering
30
+
31
+ == Installation
32
+
33
+ gem install sunspot
34
+
35
+ In order to start the packaged Solr installation, run:
36
+
37
+ sunspot-solr start -- [-d /path/to/data/directory] [-p port] [-s path/to/solr/home] [--pid-dir=path/to/pid/dir]
38
+
39
+ If you don't specify a data directory, your Solr index will be stored in your operating system's temporary directory.
40
+
41
+ If you specify a solr home, the directory must contain a <code>conf</code>
42
+ directory, which should contain at least <code>schema.xml</code> and
43
+ <code>solrconfig.xml</code>. Be sure to copy the <code>schema.xml</code> out of
44
+ the Sunspot gem's <code>solr/solr/conf</code> directory. Sunspot relies on the
45
+ field name patterns defined in the packaged <code>schema.xml</code>, so those
46
+ cannot be modified.
47
+
48
+ You can also run your own instance of Solr wherever you'd like; just copy the solr/config/schema.xml file out of the gem's solr into your installation.
49
+ You can change the URL at which Sunspot accesses Solr with:
50
+
51
+ Sunspot.config.solr.url = 'http://solr.my.host:9818/solr'
52
+
53
+ == Rails Integration
54
+
55
+ The {Sunspot::Rails}[http://github.com/outoftime/sunspot_rails] plugin makes
56
+ integrating Sunspot into Rails drop-in easy.
57
+
58
+ == Using Sunspot
59
+
60
+ === Define an index:
61
+
62
+ class Post
63
+ #...
64
+ end
65
+
66
+ Sunspot.setup(Post) do
67
+ text :title, :body
68
+ string :author_name
69
+ integer :blog_id
70
+ integer :category_ids
71
+ float :average_rating, :using => :ratings_average
72
+ time :published_at
73
+ string :sort_title do
74
+ title.downcase.sub(/^(an?|the)\W+/, ''/) if title = self.title
75
+ end
76
+ end
77
+
78
+ See Sunspot.setup for more information.
79
+
80
+ Note that in order for a class to be searchable, it must have an adapter
81
+ registered for itself or one of its subclasses. Adapters allow Sunspot to load
82
+ objects out of persistent storage, and to determine their primary key for
83
+ indexing. {Sunspot::Rails}[http://github.com/outoftime/sunspot_rails] comes with
84
+ an adapter for ActiveRecord objects, but for other types of models you will need
85
+ to define your own. See Sunspot::Adapters for more information.
86
+
87
+ === Search for objects:
88
+
89
+ search = Sunspot.search Post do
90
+ keywords 'great pizza'
91
+ with :author_name, 'Mark Twain'
92
+ with(:blog_id).any_of [2, 14]
93
+ with(:category_ids).all_of [4, 10]
94
+ with(:published_at).less_than Time.now
95
+ any_of do
96
+ with(:expired_at).greater_than(Time.now)
97
+ with(:expired_at, nil)
98
+ end
99
+ without :title, 'Bad Title'
100
+ without bad_instance # specifically exclude this instance from results
101
+
102
+ paginate :page => 3, :per_page => 15
103
+ order_by :average_rating, :desc
104
+
105
+ facet :blog_id
106
+ end
107
+
108
+ See Sunspot.search for more information.
109
+
110
+ === Get data from search:
111
+
112
+ search.results
113
+ search.total
114
+ search.page
115
+ search.per_page
116
+ search.facet(:blog_id)
117
+
118
+ == About the API documentation
119
+
120
+ All of the methods documented in the RDoc are considered part of Sunspot's
121
+ public API. Methods that are not part of the public API are documented in the
122
+ code, but excluded from the RDoc. If you find yourself needing to access methods
123
+ that are not part of the public API in order to do what you need, please contact
124
+ me so I can rectify the situation!
125
+
126
+ == Dependencies
127
+
128
+ 1. RSolr 0.10.1
129
+ 2. Daemons 1.x
130
+ 4. Java 1.5+
131
+
132
+ Sunspot has been tested with MRI 1.8.6 and 1.8.7, REE 1.8.6, YARV 1.9.1, and
133
+ JRuby 1.2.0
134
+
135
+ == Bugs
136
+
137
+ Please submit bug reports to
138
+ http://outoftime.lighthouseapp.com/projects/20339-sunspot
139
+
140
+ == Contribution Guidelines
141
+
142
+ Contributions are very welcome - both new features, enhancements, and bug fixes.
143
+ Bug reports with a failing regression test are also lovely. In order to keep the
144
+ contribution process as organized and smooth as possible, please follow these
145
+ guidelines:
146
+
147
+ * Contributions should be submitted via Sunspot's Lighthouse account, with an
148
+ attached git patch. See below for how to create a git patch.
149
+ * Patches should not make any changes in your patch to the gemspec task other
150
+ than adding/removing dependencies (e.g., changing the name, version, email,
151
+ description, etc.)
152
+ * Patches should not include any changes to the gemspec itself.
153
+ * Document any new methods, options, arguments, etc.
154
+ * Write tests.
155
+ * As much as possible, follow the coding and testing styles you see in existing
156
+ code. One could accuse me of being nitpicky about this, but consistent code is
157
+ easier to read, maintain, and enhance.
158
+ * Don't make any massive changes to the structure of library or test code. If
159
+ you think something needs a huge refactor or rearrangement, shoot me a
160
+ message; trying to apply that kind of patch without warning opens the door to
161
+ a world of conflict hurt.
162
+
163
+ Here's how to create a Git patch - assuming you're pulling from the canonical
164
+ Sunspot repository at `upstream`:
165
+
166
+ git fetch upstream
167
+ git format-patch upstre
168
+
169
+ == Further Reading
170
+
171
+ * Sunspot Discussion: http://groups.google.com/group/ruby-sunspot
172
+ * IRC: #sunspot-ruby @ Freenode
173
+ * Posts about Sunspot from my tumblog: http://outofti.me/tagged/sunspot
174
+ * Read about it on Linux Magazine: http://www.linux-mag.com/id/7341
175
+
176
+ == Contributors
177
+
178
+ * Mat Brown (mat@patch.com)
179
+ * Peer Allan (peer.allan@gmail.com)
180
+ * Dmitriy Dzema (dima@dzema.name)
181
+ * Benjamin Krause (bk@benjaminkrause.com)
182
+ * Marcel de Graaf (marcel@slashdev.nl)
183
+ * Brandon Keepers (brandon@opensoul.org)
184
+ * Peter Berkenbosch (peterberkenbosch@me.com)
185
+ * Brian Atkinson
186
+ * Tom Coleman (tom@thesnail.org)
187
+ * Matt Mitchell (goodieboy@gmail.com)
188
+
189
+ == License
190
+
191
+ Sunspot is distributed under the MIT License, copyright (c) 2008-2009 Mat Brown
@@ -0,0 +1,9 @@
1
+ ENV['RUBYOPT'] = '-W1'
2
+
3
+ task :environment do
4
+ require File.dirname(__FILE__) + '/lib/sunspot'
5
+ end
6
+
7
+ Dir['tasks/**/*.rake'].each { |t| load t }
8
+
9
+ task :default => 'spec:api'
data/TODO ADDED
@@ -0,0 +1,14 @@
1
+ === 0.10.x ===
2
+ * Can retrieve facets from search via string
3
+ * Allow #latitude and #longitude as coordinate attributes
4
+ * Allow use of #text_fields from inside disjunction
5
+
6
+ * Assumed inconsistency
7
+ * Support all operations in batches. Make it smart.
8
+ * Don't use more than one commits when one is equivalent
9
+ * Preserve adds/deletes that are done after last commit
10
+ * Don't do adds and deletes for the same document out of order
11
+ * Don't do more than one add for the same document
12
+ * Do use as few requests as possible within those constraints
13
+ === Future ===
14
+ * Support Solr functions (e.g. dismax :bf)
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 10
3
+ :patch: 7
4
+ :major: 0
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'optparse'
5
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'sunspot', 'schema')
6
+
7
+ solr_directory = FileUtils.pwd
8
+
9
+ schema = Sunspot::Schema.new
10
+
11
+ OptionParser.new do |opts|
12
+ opts.banner = 'Usage: sunspot-configure-solr [options]'
13
+
14
+ opts.on '--tokenizer=TOKENIZER', 'Tokenizer class to use' do |tokenizer|
15
+ schema.tokenizer = tokenizer
16
+ end
17
+
18
+ opts.on '--extra-filter=EXTRA_FILTER', 'Extra filters for tokenized text (you may specify this multiple times)' do |extra_filter|
19
+ schema.add_filter(extra_filter)
20
+ end
21
+
22
+ opts.on '--dir=CONF_DIR', 'Directory containing Solr configuration and schema' do |dir|
23
+ solr_directory = File.expand_path(dir)
24
+ end
25
+ end.parse!
26
+
27
+ conf_directory = File.join(solr_directory, 'conf')
28
+ schema_file = File.join(conf_directory, 'schema.xml')
29
+
30
+ FileUtils.mkdir_p(conf_directory)
31
+
32
+ if File.exist?(schema_file)
33
+ backup_file = File.join(conf_directory, "schema-#{File.mtime(schema_file).strftime('%Y%m%d%H%M%S')}.xml")
34
+ STDERR.puts("Backing up current schema file to #{File.expand_path(backup_file)}")
35
+ FileUtils.mv(schema_file, backup_file)
36
+ end
37
+
38
+ File.open(File.join(conf_directory, 'schema.xml'), 'w') do |file|
39
+ file << schema.to_xml
40
+ end
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env ruby
2
+ using_gems = false
3
+ begin
4
+ require 'fileutils'
5
+ require 'tempfile'
6
+ require 'tmpdir'
7
+ require 'optparse'
8
+ require 'daemons'
9
+ rescue LoadError => e
10
+ if using_gems
11
+ raise(e)
12
+ else
13
+ using_gems = true
14
+ require 'rubygems'
15
+ retry
16
+ end
17
+ end
18
+
19
+ working_directory = FileUtils.pwd
20
+ solr_install = File.expand_path(File.join(File.dirname(__FILE__), '..', 'solr'))
21
+
22
+ port = '8983'
23
+ data_dir = File.expand_path(File.join(Dir.tmpdir, 'solr_data'))
24
+ solr_home = File.join(solr_install, 'solr')
25
+ pid_dir = working_directory
26
+ log_file = nil
27
+ log_level = 'OFF'
28
+ min_memory = '128m'
29
+ max_memory = '512m'
30
+
31
+ OptionParser.new do |opts|
32
+ opts.banner = "Usage: sunspot-solr start [options]"
33
+
34
+ opts.on '-p', '--port=PORT', 'Port on which to run Solr (default 8983)' do |p|
35
+ port = p
36
+ end
37
+
38
+ opts.on '-d', '--data-directory=DIRECTORY', 'Solr data directory' do |d|
39
+ data_dir = File.expand_path(d)
40
+ end
41
+
42
+ opts.on '-s', '--solr-home=HOME', 'Solr home directory (should contain conf/ directory)' do |s|
43
+ solr_home = File.expand_path(s)
44
+ end
45
+
46
+ opts.on '--pid-dir=PID_DIR', 'Directory for pid files' do |pd|
47
+ pid_dir = File.expand_path(pd)
48
+ end
49
+
50
+ opts.on '-l', '--log-level=LOG_LEVEL', 'Solr logging level' do |l|
51
+ log_level = l
52
+ end
53
+
54
+ opts.on '--log-file=LOG_FILE', 'Path to Solr log file' do |lf|
55
+ log_file = File.expand_path(lf)
56
+ end
57
+
58
+ opts.on '--max-memory=MEMORY', 'Specify the maximum size of the memory allocation pool' do |mm|
59
+ max_memory = mm
60
+ end
61
+
62
+ opts.on '--min-memory=MEMORY', 'Specify the initial size of the memory allocation pool' do |mm|
63
+ min_memory = mm
64
+ end
65
+ end.parse!
66
+
67
+ options = { :dir_mode => :normal, :dir => pid_dir }
68
+
69
+ def logging_properties( log_file, log_level )
70
+ temp_file = Tempfile.new 'logging.properties'
71
+ temp_file << <<PROPERTIES
72
+ .level = #{log_level}
73
+ handlers = java.util.logging.FileHandler
74
+ java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
75
+ java.util.logging.FileHandler.pattern = #{log_file}
76
+ PROPERTIES
77
+ temp_file.flush
78
+ temp_file.close
79
+ temp_file.path
80
+ end
81
+
82
+ Daemons.run_proc('sunspot-solr', options) do
83
+ FileUtils.cd(solr_install) do
84
+ args = ['java']
85
+ args << "-Xms#{min_memory}"
86
+ args << "-Xmx#{max_memory}"
87
+ args << "-Djetty.port=#{port}" if port
88
+ args << "-Dsolr.data.dir=#{data_dir}" if data_dir
89
+ args << "-Dsolr.solr.home=#{solr_home}" if solr_home
90
+ args << "-Djava.util.logging.config.file=#{logging_properties(log_file, log_level)}" if log_file and log_level != 'OFF'
91
+ args << '-jar' << File.join(solr_install, 'start.jar')
92
+ STDERR.puts(args * ' ')
93
+ Kernel.exec(*args)
94
+ end
95
+ end