sunspot_rails 2.0.0.pre.120924 → 2.0.0.pre.120925

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 (293) hide show
  1. data/.gitignore +6 -10
  2. data/{sunspot_rails/.rspec → .rspec} +0 -0
  3. data/{sunspot_rails/History.txt → History.txt} +0 -0
  4. data/{sunspot/LICENSE → LICENSE} +0 -0
  5. data/{sunspot_rails/MIT-LICENSE → MIT-LICENSE} +0 -0
  6. data/{sunspot_rails/README.rdoc → README.rdoc} +0 -0
  7. data/Rakefile +12 -32
  8. data/{sunspot_rails/TODO → TODO} +0 -0
  9. data/{sunspot_rails/dev_tasks → dev_tasks}/rdoc.rake +0 -0
  10. data/{sunspot_rails/dev_tasks → dev_tasks}/release.rake +0 -0
  11. data/{sunspot_rails/dev_tasks → dev_tasks}/spec.rake +0 -0
  12. data/{sunspot/tasks → dev_tasks}/todo.rake +0 -0
  13. data/{sunspot_rails/gemfiles → gemfiles}/rails-2.3.14 +0 -0
  14. data/{sunspot_rails/gemfiles → gemfiles}/rails-3.0.15 +0 -0
  15. data/{sunspot_rails/gemfiles → gemfiles}/rails-3.1.6 +0 -0
  16. data/{sunspot_rails/gemfiles → gemfiles}/rails-3.2.6 +0 -0
  17. data/{sunspot_rails/generators → generators}/sunspot/sunspot_generator.rb +0 -0
  18. data/{sunspot_rails/generators → generators}/sunspot/templates/sunspot.yml +0 -0
  19. data/{sunspot_rails/install.rb → install.rb} +0 -0
  20. data/{sunspot_rails/lib → lib}/generators/sunspot_rails.rb +0 -0
  21. data/{sunspot_rails/lib → lib}/generators/sunspot_rails/install/install_generator.rb +0 -0
  22. data/{sunspot_rails/lib → lib}/generators/sunspot_rails/install/templates/config/sunspot.yml +0 -0
  23. data/{sunspot_rails/lib → lib}/sunspot/rails.rb +0 -0
  24. data/{sunspot_rails/lib → lib}/sunspot/rails/adapters.rb +0 -0
  25. data/{sunspot_rails/lib → lib}/sunspot/rails/configuration.rb +0 -0
  26. data/{sunspot_rails/lib → lib}/sunspot/rails/init.rb +0 -0
  27. data/{sunspot_rails/lib → lib}/sunspot/rails/log_subscriber.rb +0 -0
  28. data/{sunspot_rails/lib → lib}/sunspot/rails/railtie.rb +0 -0
  29. data/{sunspot_rails/lib → lib}/sunspot/rails/railties/controller_runtime.rb +0 -0
  30. data/{sunspot_rails/lib → lib}/sunspot/rails/request_lifecycle.rb +0 -0
  31. data/{sunspot_rails/lib → lib}/sunspot/rails/searchable.rb +0 -0
  32. data/{sunspot_rails/lib → lib}/sunspot/rails/server.rb +0 -0
  33. data/{sunspot_rails/lib → lib}/sunspot/rails/solr_instrumentation.rb +0 -0
  34. data/{sunspot_rails/lib → lib}/sunspot/rails/solr_logging.rb +0 -0
  35. data/{sunspot_rails/lib → lib}/sunspot/rails/spec_helper.rb +0 -0
  36. data/{sunspot_rails/lib → lib}/sunspot/rails/stub_session_proxy.rb +0 -0
  37. data/{sunspot_rails/lib → lib}/sunspot/rails/tasks.rb +0 -0
  38. data/{sunspot_rails/lib → lib}/sunspot_rails.rb +0 -0
  39. data/{sunspot_rails/spec → spec}/configuration_spec.rb +0 -0
  40. data/{sunspot_rails/spec → spec}/model_lifecycle_spec.rb +0 -0
  41. data/{sunspot_rails/spec → spec}/model_spec.rb +0 -0
  42. data/{sunspot_rails/spec → spec}/rails_template/app/controllers/application_controller.rb +0 -0
  43. data/{sunspot_rails/spec → spec}/rails_template/app/controllers/posts_controller.rb +0 -0
  44. data/{sunspot_rails/spec → spec}/rails_template/app/models/author.rb +0 -0
  45. data/{sunspot_rails/spec → spec}/rails_template/app/models/blog.rb +0 -0
  46. data/{sunspot_rails/spec → spec}/rails_template/app/models/location.rb +0 -0
  47. data/{sunspot_rails/spec → spec}/rails_template/app/models/photo_post.rb +0 -0
  48. data/{sunspot_rails/spec → spec}/rails_template/app/models/post.rb +0 -0
  49. data/{sunspot_rails/spec → spec}/rails_template/app/models/post_with_auto.rb +0 -0
  50. data/{sunspot_rails/spec → spec}/rails_template/app/models/post_with_default_scope.rb +0 -0
  51. data/{sunspot_rails/spec → spec}/rails_template/config/boot.rb +0 -0
  52. data/{sunspot_rails/spec → spec}/rails_template/config/preinitializer.rb +0 -0
  53. data/{sunspot_rails/spec → spec}/rails_template/config/routes.rb +0 -0
  54. data/{sunspot_rails/spec → spec}/rails_template/config/sunspot.yml +0 -0
  55. data/{sunspot_rails/spec → spec}/rails_template/db/schema.rb +0 -0
  56. data/{sunspot_rails/spec → spec}/request_lifecycle_spec.rb +0 -0
  57. data/{sunspot_rails/spec → spec}/schema.rb +0 -0
  58. data/{sunspot_rails/spec → spec}/searchable_spec.rb +0 -0
  59. data/{sunspot_rails/spec → spec}/server_spec.rb +0 -0
  60. data/{sunspot_rails/spec → spec}/session_spec.rb +0 -0
  61. data/{sunspot_rails/spec → spec}/shared_examples/indexed_after_save.rb +0 -0
  62. data/{sunspot_rails/spec → spec}/shared_examples/not_indexed_after_save.rb +0 -0
  63. data/{sunspot_rails/spec → spec}/spec_helper.rb +0 -0
  64. data/{sunspot_rails/spec → spec}/stub_session_proxy_spec.rb +0 -0
  65. data/{sunspot_rails/sunspot_rails.gemspec → sunspot_rails.gemspec} +0 -0
  66. metadata +102 -305
  67. data/.travis.yml +0 -35
  68. data/README.md +0 -863
  69. data/ci/travis.sh +0 -67
  70. data/sunspot/.gitignore +0 -13
  71. data/sunspot/Gemfile +0 -5
  72. data/sunspot/History.txt +0 -258
  73. data/sunspot/Rakefile +0 -13
  74. data/sunspot/TODO +0 -13
  75. data/sunspot/lib/light_config.rb +0 -40
  76. data/sunspot/lib/sunspot.rb +0 -579
  77. data/sunspot/lib/sunspot/adapters.rb +0 -349
  78. data/sunspot/lib/sunspot/batcher.rb +0 -62
  79. data/sunspot/lib/sunspot/class_set.rb +0 -23
  80. data/sunspot/lib/sunspot/composite_setup.rb +0 -202
  81. data/sunspot/lib/sunspot/configuration.rb +0 -53
  82. data/sunspot/lib/sunspot/data_extractor.rb +0 -50
  83. data/sunspot/lib/sunspot/dsl.rb +0 -5
  84. data/sunspot/lib/sunspot/dsl/adjustable.rb +0 -47
  85. data/sunspot/lib/sunspot/dsl/field_group.rb +0 -57
  86. data/sunspot/lib/sunspot/dsl/field_query.rb +0 -345
  87. data/sunspot/lib/sunspot/dsl/fields.rb +0 -103
  88. data/sunspot/lib/sunspot/dsl/fulltext.rb +0 -243
  89. data/sunspot/lib/sunspot/dsl/function.rb +0 -27
  90. data/sunspot/lib/sunspot/dsl/functional.rb +0 -44
  91. data/sunspot/lib/sunspot/dsl/more_like_this_query.rb +0 -56
  92. data/sunspot/lib/sunspot/dsl/paginatable.rb +0 -32
  93. data/sunspot/lib/sunspot/dsl/query_facet.rb +0 -36
  94. data/sunspot/lib/sunspot/dsl/restriction.rb +0 -25
  95. data/sunspot/lib/sunspot/dsl/restriction_with_near.rb +0 -160
  96. data/sunspot/lib/sunspot/dsl/scope.rb +0 -214
  97. data/sunspot/lib/sunspot/dsl/search.rb +0 -30
  98. data/sunspot/lib/sunspot/dsl/standard_query.rb +0 -122
  99. data/sunspot/lib/sunspot/field.rb +0 -193
  100. data/sunspot/lib/sunspot/field_factory.rb +0 -129
  101. data/sunspot/lib/sunspot/indexer.rb +0 -136
  102. data/sunspot/lib/sunspot/query.rb +0 -11
  103. data/sunspot/lib/sunspot/query/abstract_field_facet.rb +0 -55
  104. data/sunspot/lib/sunspot/query/bbox.rb +0 -15
  105. data/sunspot/lib/sunspot/query/boost_query.rb +0 -24
  106. data/sunspot/lib/sunspot/query/common_query.rb +0 -96
  107. data/sunspot/lib/sunspot/query/composite_fulltext.rb +0 -36
  108. data/sunspot/lib/sunspot/query/connective.rb +0 -206
  109. data/sunspot/lib/sunspot/query/date_field_facet.rb +0 -14
  110. data/sunspot/lib/sunspot/query/dismax.rb +0 -132
  111. data/sunspot/lib/sunspot/query/field_facet.rb +0 -41
  112. data/sunspot/lib/sunspot/query/field_group.rb +0 -37
  113. data/sunspot/lib/sunspot/query/filter.rb +0 -38
  114. data/sunspot/lib/sunspot/query/function_query.rb +0 -52
  115. data/sunspot/lib/sunspot/query/geo.rb +0 -53
  116. data/sunspot/lib/sunspot/query/geofilt.rb +0 -16
  117. data/sunspot/lib/sunspot/query/highlighting.rb +0 -62
  118. data/sunspot/lib/sunspot/query/more_like_this.rb +0 -61
  119. data/sunspot/lib/sunspot/query/more_like_this_query.rb +0 -12
  120. data/sunspot/lib/sunspot/query/pagination.rb +0 -42
  121. data/sunspot/lib/sunspot/query/query_facet.rb +0 -53
  122. data/sunspot/lib/sunspot/query/range_facet.rb +0 -15
  123. data/sunspot/lib/sunspot/query/restriction.rb +0 -308
  124. data/sunspot/lib/sunspot/query/scope.rb +0 -9
  125. data/sunspot/lib/sunspot/query/sort.rb +0 -109
  126. data/sunspot/lib/sunspot/query/sort_composite.rb +0 -34
  127. data/sunspot/lib/sunspot/query/standard_query.rb +0 -16
  128. data/sunspot/lib/sunspot/query/text_field_boost.rb +0 -17
  129. data/sunspot/lib/sunspot/schema.rb +0 -151
  130. data/sunspot/lib/sunspot/search.rb +0 -9
  131. data/sunspot/lib/sunspot/search/abstract_search.rb +0 -286
  132. data/sunspot/lib/sunspot/search/date_facet.rb +0 -35
  133. data/sunspot/lib/sunspot/search/facet_row.rb +0 -27
  134. data/sunspot/lib/sunspot/search/field_facet.rb +0 -88
  135. data/sunspot/lib/sunspot/search/field_group.rb +0 -70
  136. data/sunspot/lib/sunspot/search/group.rb +0 -54
  137. data/sunspot/lib/sunspot/search/highlight.rb +0 -38
  138. data/sunspot/lib/sunspot/search/hit.rb +0 -150
  139. data/sunspot/lib/sunspot/search/hit_enumerable.rb +0 -68
  140. data/sunspot/lib/sunspot/search/more_like_this_search.rb +0 -31
  141. data/sunspot/lib/sunspot/search/paginated_collection.rb +0 -57
  142. data/sunspot/lib/sunspot/search/query_facet.rb +0 -67
  143. data/sunspot/lib/sunspot/search/range_facet.rb +0 -37
  144. data/sunspot/lib/sunspot/search/standard_search.rb +0 -21
  145. data/sunspot/lib/sunspot/session.rb +0 -262
  146. data/sunspot/lib/sunspot/session_proxy.rb +0 -95
  147. data/sunspot/lib/sunspot/session_proxy/abstract_session_proxy.rb +0 -29
  148. data/sunspot/lib/sunspot/session_proxy/class_sharding_session_proxy.rb +0 -66
  149. data/sunspot/lib/sunspot/session_proxy/id_sharding_session_proxy.rb +0 -89
  150. data/sunspot/lib/sunspot/session_proxy/master_slave_session_proxy.rb +0 -43
  151. data/sunspot/lib/sunspot/session_proxy/retry_5xx_session_proxy.rb +0 -67
  152. data/sunspot/lib/sunspot/session_proxy/sharding_session_proxy.rb +0 -222
  153. data/sunspot/lib/sunspot/session_proxy/silent_fail_session_proxy.rb +0 -42
  154. data/sunspot/lib/sunspot/session_proxy/thread_local_session_proxy.rb +0 -37
  155. data/sunspot/lib/sunspot/setup.rb +0 -350
  156. data/sunspot/lib/sunspot/text_field_setup.rb +0 -29
  157. data/sunspot/lib/sunspot/type.rb +0 -393
  158. data/sunspot/lib/sunspot/util.rb +0 -252
  159. data/sunspot/lib/sunspot/version.rb +0 -3
  160. data/sunspot/script/console +0 -10
  161. data/sunspot/spec/api/adapters_spec.rb +0 -68
  162. data/sunspot/spec/api/batcher_spec.rb +0 -112
  163. data/sunspot/spec/api/binding_spec.rb +0 -50
  164. data/sunspot/spec/api/class_set_spec.rb +0 -24
  165. data/sunspot/spec/api/hit_enumerable_spec.rb +0 -47
  166. data/sunspot/spec/api/indexer/attributes_spec.rb +0 -149
  167. data/sunspot/spec/api/indexer/batch_spec.rb +0 -72
  168. data/sunspot/spec/api/indexer/dynamic_fields_spec.rb +0 -42
  169. data/sunspot/spec/api/indexer/fixed_fields_spec.rb +0 -57
  170. data/sunspot/spec/api/indexer/fulltext_spec.rb +0 -43
  171. data/sunspot/spec/api/indexer/removal_spec.rb +0 -53
  172. data/sunspot/spec/api/indexer/spec_helper.rb +0 -1
  173. data/sunspot/spec/api/indexer_spec.rb +0 -14
  174. data/sunspot/spec/api/query/advanced_manipulation_examples.rb +0 -35
  175. data/sunspot/spec/api/query/connectives_examples.rb +0 -201
  176. data/sunspot/spec/api/query/dsl_spec.rb +0 -18
  177. data/sunspot/spec/api/query/dynamic_fields_examples.rb +0 -165
  178. data/sunspot/spec/api/query/faceting_examples.rb +0 -497
  179. data/sunspot/spec/api/query/fulltext_examples.rb +0 -313
  180. data/sunspot/spec/api/query/function_spec.rb +0 -79
  181. data/sunspot/spec/api/query/geo_examples.rb +0 -68
  182. data/sunspot/spec/api/query/group_spec.rb +0 -32
  183. data/sunspot/spec/api/query/highlighting_examples.rb +0 -245
  184. data/sunspot/spec/api/query/more_like_this_spec.rb +0 -140
  185. data/sunspot/spec/api/query/ordering_pagination_examples.rb +0 -116
  186. data/sunspot/spec/api/query/scope_examples.rb +0 -275
  187. data/sunspot/spec/api/query/spatial_examples.rb +0 -27
  188. data/sunspot/spec/api/query/spec_helper.rb +0 -1
  189. data/sunspot/spec/api/query/standard_spec.rb +0 -29
  190. data/sunspot/spec/api/query/text_field_scoping_examples.rb +0 -30
  191. data/sunspot/spec/api/query/types_spec.rb +0 -20
  192. data/sunspot/spec/api/search/dynamic_fields_spec.rb +0 -33
  193. data/sunspot/spec/api/search/faceting_spec.rb +0 -360
  194. data/sunspot/spec/api/search/highlighting_spec.rb +0 -69
  195. data/sunspot/spec/api/search/hits_spec.rb +0 -147
  196. data/sunspot/spec/api/search/paginated_collection_spec.rb +0 -36
  197. data/sunspot/spec/api/search/results_spec.rb +0 -72
  198. data/sunspot/spec/api/search/search_spec.rb +0 -23
  199. data/sunspot/spec/api/search/spec_helper.rb +0 -1
  200. data/sunspot/spec/api/session_proxy/class_sharding_session_proxy_spec.rb +0 -85
  201. data/sunspot/spec/api/session_proxy/id_sharding_session_proxy_spec.rb +0 -30
  202. data/sunspot/spec/api/session_proxy/master_slave_session_proxy_spec.rb +0 -41
  203. data/sunspot/spec/api/session_proxy/retry_5xx_session_proxy_spec.rb +0 -78
  204. data/sunspot/spec/api/session_proxy/sharding_session_proxy_spec.rb +0 -77
  205. data/sunspot/spec/api/session_proxy/silent_fail_session_proxy_spec.rb +0 -24
  206. data/sunspot/spec/api/session_proxy/spec_helper.rb +0 -9
  207. data/sunspot/spec/api/session_proxy/thread_local_session_proxy_spec.rb +0 -39
  208. data/sunspot/spec/api/session_spec.rb +0 -232
  209. data/sunspot/spec/api/spec_helper.rb +0 -3
  210. data/sunspot/spec/api/sunspot_spec.rb +0 -29
  211. data/sunspot/spec/ext.rb +0 -11
  212. data/sunspot/spec/helpers/indexer_helper.rb +0 -17
  213. data/sunspot/spec/helpers/integration_helper.rb +0 -8
  214. data/sunspot/spec/helpers/mock_session_helper.rb +0 -13
  215. data/sunspot/spec/helpers/query_helper.rb +0 -26
  216. data/sunspot/spec/helpers/search_helper.rb +0 -68
  217. data/sunspot/spec/integration/dynamic_fields_spec.rb +0 -57
  218. data/sunspot/spec/integration/faceting_spec.rb +0 -330
  219. data/sunspot/spec/integration/field_grouping_spec.rb +0 -100
  220. data/sunspot/spec/integration/geospatial_spec.rb +0 -96
  221. data/sunspot/spec/integration/highlighting_spec.rb +0 -44
  222. data/sunspot/spec/integration/indexing_spec.rb +0 -55
  223. data/sunspot/spec/integration/keyword_search_spec.rb +0 -317
  224. data/sunspot/spec/integration/local_search_spec.rb +0 -64
  225. data/sunspot/spec/integration/more_like_this_spec.rb +0 -43
  226. data/sunspot/spec/integration/scoped_search_spec.rb +0 -386
  227. data/sunspot/spec/integration/stored_fields_spec.rb +0 -12
  228. data/sunspot/spec/integration/test_pagination.rb +0 -43
  229. data/sunspot/spec/integration/unicode_spec.rb +0 -15
  230. data/sunspot/spec/mocks/adapters.rb +0 -33
  231. data/sunspot/spec/mocks/blog.rb +0 -3
  232. data/sunspot/spec/mocks/comment.rb +0 -21
  233. data/sunspot/spec/mocks/connection.rb +0 -126
  234. data/sunspot/spec/mocks/mock_adapter.rb +0 -30
  235. data/sunspot/spec/mocks/mock_class_sharding_session_proxy.rb +0 -24
  236. data/sunspot/spec/mocks/mock_record.rb +0 -52
  237. data/sunspot/spec/mocks/mock_sharding_session_proxy.rb +0 -15
  238. data/sunspot/spec/mocks/photo.rb +0 -11
  239. data/sunspot/spec/mocks/post.rb +0 -86
  240. data/sunspot/spec/mocks/super_class.rb +0 -2
  241. data/sunspot/spec/mocks/user.rb +0 -13
  242. data/sunspot/spec/spec_helper.rb +0 -40
  243. data/sunspot/sunspot.gemspec +0 -37
  244. data/sunspot/tasks/rdoc.rake +0 -27
  245. data/sunspot/tasks/schema.rake +0 -19
  246. data/sunspot_rails/.gitignore +0 -7
  247. data/sunspot_rails/LICENSE +0 -18
  248. data/sunspot_rails/Rakefile +0 -17
  249. data/sunspot_rails/dev_tasks/todo.rake +0 -4
  250. data/sunspot_solr/Gemfile +0 -3
  251. data/sunspot_solr/README.rdoc +0 -24
  252. data/sunspot_solr/bin/sunspot-installer +0 -20
  253. data/sunspot_solr/bin/sunspot-solr +0 -80
  254. data/sunspot_solr/lib/sunspot/solr/installer.rb +0 -25
  255. data/sunspot_solr/lib/sunspot/solr/installer/config_installer.rb +0 -46
  256. data/sunspot_solr/lib/sunspot/solr/installer/task_helper.rb +0 -13
  257. data/sunspot_solr/lib/sunspot/solr/java.rb +0 -10
  258. data/sunspot_solr/lib/sunspot/solr/railtie.rb +0 -15
  259. data/sunspot_solr/lib/sunspot/solr/server.rb +0 -223
  260. data/sunspot_solr/lib/sunspot/solr/tasks.rb +0 -49
  261. data/sunspot_solr/lib/sunspot_solr.rb +0 -5
  262. data/sunspot_solr/solr/README.txt +0 -42
  263. data/sunspot_solr/solr/etc/jetty.xml +0 -219
  264. data/sunspot_solr/solr/etc/webdefault.xml +0 -379
  265. data/sunspot_solr/solr/lib/jetty-6.1.26-patched-JETTY-1340.jar +0 -0
  266. data/sunspot_solr/solr/lib/jetty-util-6.1.26-patched-JETTY-1340.jar +0 -0
  267. data/sunspot_solr/solr/lib/jsp-2.1/ant-1.6.5.jar +0 -0
  268. data/sunspot_solr/solr/lib/jsp-2.1/core-3.1.1.jar +0 -0
  269. data/sunspot_solr/solr/lib/jsp-2.1/jsp-2.1.jar +0 -0
  270. data/sunspot_solr/solr/lib/jsp-2.1/jsp-api-2.1.jar +0 -0
  271. data/sunspot_solr/solr/lib/servlet-api-2.5-20081211.jar +0 -0
  272. data/sunspot_solr/solr/solr/.gitignore +0 -1
  273. data/sunspot_solr/solr/solr/README.txt +0 -54
  274. data/sunspot_solr/solr/solr/conf/admin-extra.html +0 -31
  275. data/sunspot_solr/solr/solr/conf/elevate.xml +0 -36
  276. data/sunspot_solr/solr/solr/conf/mapping-ISOLatin1Accent.txt +0 -246
  277. data/sunspot_solr/solr/solr/conf/protwords.txt +0 -21
  278. data/sunspot_solr/solr/solr/conf/schema.xml +0 -250
  279. data/sunspot_solr/solr/solr/conf/scripts.conf +0 -24
  280. data/sunspot_solr/solr/solr/conf/solrconfig.xml +0 -934
  281. data/sunspot_solr/solr/solr/conf/spellings.txt +0 -2
  282. data/sunspot_solr/solr/solr/conf/stopwords.txt +0 -58
  283. data/sunspot_solr/solr/solr/conf/synonyms.txt +0 -31
  284. data/sunspot_solr/solr/solr/conf/xslt/example.xsl +0 -132
  285. data/sunspot_solr/solr/solr/conf/xslt/example_atom.xsl +0 -67
  286. data/sunspot_solr/solr/solr/conf/xslt/example_rss.xsl +0 -66
  287. data/sunspot_solr/solr/solr/conf/xslt/luke.xsl +0 -337
  288. data/sunspot_solr/solr/start.jar +0 -0
  289. data/sunspot_solr/solr/webapps/solr.war +0 -0
  290. data/sunspot_solr/spec/server_spec.rb +0 -98
  291. data/sunspot_solr/spec/spec_helper.rb +0 -18
  292. data/sunspot_solr/sunspot_solr.gemspec +0 -37
  293. data/tools/gem_tasks.rb +0 -69
@@ -1,9 +0,0 @@
1
- module Sunspot
2
- module Query
3
- class Scope < Connective::Conjunction
4
- def to_params
5
- { :fq => @components.map { |component| component.to_filter_query }}
6
- end
7
- end
8
- end
9
- end
@@ -1,109 +0,0 @@
1
- module Sunspot
2
- module Query
3
- #
4
- # The classes in this module implement query components that build sort
5
- # parameters for Solr. As well as regular sort on fields, there are several
6
- # "special" sorts that allow ordering for metrics calculated during the
7
- # search.
8
- #
9
- module Sort #:nodoc: all
10
- DIRECTIONS = {
11
- :asc => 'asc',
12
- :ascending => 'asc',
13
- :desc => 'desc',
14
- :descending => 'desc'
15
- }
16
-
17
- class <<self
18
- #
19
- # Certain field names are "special", referring to specific non-field
20
- # sorts, which are generally by other metrics associated with hits.
21
- #
22
- # XXX I'm not entirely convinced it's a good idea to prevent anyone from
23
- # ever sorting by a field named 'score', etc.
24
- #
25
- def special(name)
26
- special_class_name = "#{Util.camel_case(name.to_s)}Sort"
27
- if const_defined?(special_class_name) && special_class_name != 'FieldSort'
28
- const_get(special_class_name)
29
- end
30
- end
31
- end
32
-
33
- #
34
- # Base class for sorts. All subclasses should implement the #to_param
35
- # method, which is a string that is then concatenated with other sort
36
- # strings by the SortComposite to form the sort parameter.
37
- #
38
- class Abstract
39
- def initialize(direction)
40
- @direction = (direction || :asc).to_sym
41
- end
42
-
43
- private
44
-
45
- #
46
- # Translate fairly forgiving direction argument into solr direction
47
- #
48
- def direction_for_solr
49
- DIRECTIONS[@direction] ||
50
- raise(
51
- ArgumentError,
52
- "Unknown sort direction #{@direction}. Acceptable input is: #{DIRECTIONS.keys.map { |input| input.inspect } * ', '}"
53
- )
54
- end
55
- end
56
-
57
- #
58
- # A FieldSort is the usual kind of sort, by the value of a particular
59
- # field, ascending or descending
60
- #
61
- class FieldSort < Abstract
62
- def initialize(field, direction = nil)
63
- if field.multiple?
64
- raise(ArgumentError, "#{field.name} cannot be used for ordering because it is a multiple-value field")
65
- end
66
- @field, @direction = field, (direction || :asc).to_sym
67
- end
68
-
69
- def to_param
70
- "#{@field.indexed_name.to_sym} #{direction_for_solr}"
71
- end
72
- end
73
-
74
- #
75
- # A RandomSort uses Solr's random field functionality to sort results
76
- # (usually) randomly.
77
- #
78
- class RandomSort < Abstract
79
- def to_param
80
- "random_#{rand(1<<16)} #{direction_for_solr}"
81
- end
82
- end
83
-
84
- #
85
- # A ScoreSort sorts by keyword relevance score. This is only useful when
86
- # performing fulltext search.
87
- #
88
- class ScoreSort < Abstract
89
- def to_param
90
- "score #{direction_for_solr}"
91
- end
92
- end
93
-
94
- #
95
- # A GeodistSort sorts by distance from a given point.
96
- #
97
- class GeodistSort < FieldSort
98
- def initialize(field, lat, lon, direction)
99
- @lat, @lon = lat, lon
100
- super(field, direction)
101
- end
102
-
103
- def to_param
104
- "geodist(#{@field.indexed_name.to_sym},#{@lat},#{@lon}) #{direction_for_solr}"
105
- end
106
- end
107
- end
108
- end
109
- end
@@ -1,34 +0,0 @@
1
- module Sunspot
2
- module Query
3
- #
4
- # The SortComposite class encapsulates an ordered collection of Sort
5
- # objects. It's necessary to keep this as a separate class as Solr takes
6
- # the sort as a single parameter, so adding sorts as regular components
7
- # would not merge correctly in the #to_params method.
8
- #
9
- class SortComposite #:nodoc:
10
- def initialize
11
- @sorts = []
12
- end
13
-
14
- #
15
- # Add a sort to the composite
16
- #
17
- def <<(sort)
18
- @sorts << sort
19
- end
20
-
21
- #
22
- # Combine the sorts into a single param by joining them
23
- #
24
- def to_params(prefix = "")
25
- unless @sorts.empty?
26
- key = "#{prefix}sort".to_sym
27
- { key => @sorts.map { |sort| sort.to_param } * ', ' }
28
- else
29
- {}
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,16 +0,0 @@
1
- module Sunspot
2
- module Query
3
- class StandardQuery < CommonQuery
4
- attr_accessor :scope, :fulltext
5
-
6
- def initialize(types)
7
- super
8
- @components << @fulltext = CompositeFulltext.new
9
- end
10
-
11
- def add_fulltext(keywords)
12
- @fulltext.add(keywords)
13
- end
14
- end
15
- end
16
- end
@@ -1,17 +0,0 @@
1
- module Sunspot
2
- module Query
3
- class TextFieldBoost #:nodoc:
4
- attr_reader :boost
5
-
6
- def initialize(field, boost = nil)
7
- @field, @boost = field, boost
8
- end
9
-
10
- def to_boosted_field
11
- boosted_field = @field.indexed_name
12
- boosted_field.concat("^#{@boost}") if @boost
13
- boosted_field
14
- end
15
- end
16
- end
17
- end
@@ -1,151 +0,0 @@
1
- require 'erb'
2
-
3
- module Sunspot
4
- #
5
- # Object that encapsulates schema information for building a Solr schema.xml
6
- # file. This class is used by the schema:compile task as well as the
7
- # sunspot-configure-solr executable.
8
- #
9
- class Schema #:nodoc:all
10
- FieldType = Struct.new(:name, :class_name, :suffix)
11
- FieldVariant = Struct.new(:attribute, :suffix)
12
-
13
- DEFAULT_TOKENIZER = 'solr.StandardTokenizerFactory'
14
- DEFAULT_FILTERS = %w(solr.StandardFilterFactory solr.LowerCaseFilterFactory)
15
-
16
- FIELD_TYPES = [
17
- FieldType.new('boolean', 'Bool', 'b'),
18
- FieldType.new('sfloat', 'SortableFloat', 'f'),
19
- FieldType.new('date', 'Date', 'd'),
20
- FieldType.new('sint', 'SortableInt', 'i'),
21
- FieldType.new('string', 'Str', 's'),
22
- FieldType.new('sdouble', 'SortableDouble', 'e'),
23
- FieldType.new('slong', 'SortableLong', 'l'),
24
- FieldType.new('tint', 'TrieInteger', 'it'),
25
- FieldType.new('tfloat', 'TrieFloat', 'ft'),
26
- FieldType.new('tdate', 'TrieInt', 'dt')
27
-
28
- ]
29
-
30
- FIELD_VARIANTS = [
31
- FieldVariant.new('multiValued', 'm'),
32
- FieldVariant.new('stored', 's')
33
- ]
34
-
35
- attr_reader :tokenizer, :filters
36
-
37
- def initialize
38
- @tokenizer = DEFAULT_TOKENIZER
39
- @filters = DEFAULT_FILTERS.dup
40
- end
41
-
42
- #
43
- # Attribute field types defined in the schema
44
- #
45
- def types
46
- FIELD_TYPES
47
- end
48
-
49
- #
50
- # DynamicField instances representing all the available types and variants
51
- #
52
- def dynamic_fields
53
- fields = []
54
- variant_combinations.each do |field_variants|
55
- FIELD_TYPES.each do |type|
56
- fields << DynamicField.new(type, field_variants)
57
- end
58
- end
59
- fields
60
- end
61
-
62
- #
63
- # Which tokenizer to use for text fields
64
- #
65
- def tokenizer=(tokenizer)
66
- @tokenizer =
67
- if tokenizer =~ /\./
68
- tokenizer
69
- else
70
- "solr.#{tokenizer}TokenizerFactory"
71
- end
72
- end
73
-
74
- #
75
- # Add a filter for text field tokenization
76
- #
77
- def add_filter(filter)
78
- @filters <<
79
- if filter =~ /\./
80
- filter
81
- else
82
- "solr.#{filter}FilterFactory"
83
- end
84
- end
85
-
86
- #
87
- # Return an XML representation of this schema using the ERB template
88
- #
89
- def to_xml
90
- template = File.join(File.dirname(__FILE__), '..', '..', 'templates', 'schema.xml.erb')
91
- ERB.new(File.read(template), nil, '-').result(binding)
92
- end
93
-
94
- private
95
-
96
- #
97
- # All of the possible combinations of variants
98
- #
99
- def variant_combinations
100
- combinations = []
101
- 0.upto(2 ** FIELD_VARIANTS.length - 1) do |b|
102
- combinations << combination = []
103
- FIELD_VARIANTS.each_with_index do |variant, i|
104
- combination << variant if b & 1<<i > 0
105
- end
106
- end
107
- combinations
108
- end
109
-
110
- #
111
- # Represents a dynamic field (in the Solr schema sense, not the Sunspot
112
- # sense).
113
- #
114
- class DynamicField
115
- def initialize(type, field_variants)
116
- @type, @field_variants = type, field_variants
117
- end
118
-
119
- #
120
- # Name of the field in the schema
121
- #
122
- def name
123
- variant_suffixes = @field_variants.map { |variant| variant.suffix }.join
124
- "*_#{@type.suffix}#{variant_suffixes}"
125
- end
126
-
127
- #
128
- # Name of the type as defined in the schema
129
- #
130
- def type
131
- @type.name
132
- end
133
-
134
- #
135
- # Implement magic methods to ask if a field is of a particular variant.
136
- # Returns "true" if the field is of that variant and "false" otherwise.
137
- #
138
- def method_missing(name, *args, &block)
139
- if name.to_s =~ /\?$/ && args.empty?
140
- if @field_variants.any? { |variant| "#{variant.attribute}?" == name.to_s }
141
- 'true'
142
- else
143
- 'false'
144
- end
145
- else
146
- super(name.to_sym, *args, &block)
147
- end
148
- end
149
- end
150
- end
151
- end
@@ -1,9 +0,0 @@
1
- %w(abstract_search standard_search more_like_this_search query_facet field_facet
2
- date_facet range_facet facet_row hit highlight field_group group hit_enumerable).each do |file|
3
- require File.join(File.dirname(__FILE__), 'search', file)
4
- end
5
-
6
- module Sunspot
7
- module Search
8
- end
9
- end
@@ -1,286 +0,0 @@
1
- require 'sunspot/search/paginated_collection'
2
- require 'sunspot/search/hit_enumerable'
3
-
4
- module Sunspot
5
- module Search #:nodoc:
6
-
7
- #
8
- # This class encapsulates the results of a Solr search. It provides access
9
- # to search results, total result count, facets, and pagination information.
10
- # Instances of Search are returned by the Sunspot.search and
11
- # Sunspot.new_search methods.
12
- #
13
- class AbstractSearch
14
- #
15
- # Retrieve all facet objects defined for this search, in order they were
16
- # defined. To retrieve an individual facet by name, use #facet()
17
- #
18
- attr_reader :facets, :groups
19
- attr_reader :query #:nodoc:
20
- attr_accessor :request_handler
21
-
22
- include HitEnumerable
23
-
24
- def initialize(connection, setup, query, configuration) #:nodoc:
25
- @connection, @setup, @query = connection, setup, query
26
- @query.paginate(1, configuration.pagination.default_per_page)
27
-
28
- @facets = []
29
- @facets_by_name = {}
30
-
31
- @groups_by_name = {}
32
- @groups = []
33
- end
34
-
35
- #
36
- # Execute the search on the Solr instance and store the results. If you
37
- # use Sunspot#search() to construct your searches, there is no need to call
38
- # this method as it has already been called. If you use
39
- # Sunspot#new_search(), you will need to call this method after building the
40
- # query.
41
- #
42
- def execute
43
- reset
44
- params = @query.to_params
45
- @solr_result = @connection.post "#{request_handler}", :data => params
46
- self
47
- end
48
-
49
- def execute! #:nodoc: deprecated
50
- execute
51
- end
52
-
53
- #
54
- # Get the collection of results as instantiated objects. If WillPaginate is
55
- # available, the results will be a WillPaginate::Collection instance; if
56
- # not, it will be a vanilla Array.
57
- #
58
- # If not all of the results referenced by the Solr hits actually exist in
59
- # the data store, Sunspot will only return the results that do exist.
60
- #
61
- # ==== Returns
62
- #
63
- # WillPaginate::Collection or Array:: Instantiated result objects
64
- #
65
- def results
66
- @results ||= paginate_collection(verified_hits.map { |hit| hit.instance })
67
- end
68
-
69
- #
70
- # Access raw Solr result information. Returns a collection of Hit objects
71
- # that contain the class name, primary key, keyword relevance score (if
72
- # applicable), and any stored fields.
73
- #
74
- # ==== Options (options)
75
- #
76
- # :verify::
77
- # Only return hits that reference objects that actually exist in the data
78
- # store. This causes results to be eager-loaded from the data store,
79
- # unlike the normal behavior of this method, which only loads the
80
- # referenced results when Hit#result is first called.
81
- #
82
- # ==== Returns
83
- #
84
- # Array:: Ordered collection of Hit objects
85
- #
86
- def hits(options = {})
87
- if options[:verify]
88
- super
89
- else
90
- @hits ||= paginate_collection(super)
91
- end
92
- end
93
- alias_method :raw_results, :hits
94
-
95
- #
96
- # The total number of documents matching the query parameters
97
- #
98
- # ==== Returns
99
- #
100
- # Integer:: Total matching documents
101
- #
102
- def total
103
- @total ||= solr_response['numFound'] || 0
104
- end
105
-
106
- #
107
- # The time elapsed to generate the Solr response
108
- #
109
- # ==== Returns
110
- #
111
- # Integer:: Query runtime in milliseconds
112
- #
113
- def query_time
114
- @query_time ||= solr_response_header['QTime']
115
- end
116
-
117
- #
118
- # Get the facet object for the given name. `name` can either be the name
119
- # given to a query facet, or the field name of a field facet. Returns a
120
- # Sunspot::Facet object.
121
- #
122
- # ==== Parameters
123
- #
124
- # name<Symbol>::
125
- # Name of the field to return the facet for, or the name given to the
126
- # query facet when the search was constructed.
127
- # dynamic_name<Symbol>::
128
- # If faceting on a dynamic field, this is the dynamic portion of the field
129
- # name.
130
- #
131
- # ==== Example:
132
- #
133
- # search = Sunspot.search(Post) do
134
- # facet :category_ids
135
- # dynamic :custom do
136
- # facet :cuisine
137
- # end
138
- # facet :age do
139
- # row 'Less than a month' do
140
- # with(:published_at).greater_than(1.month.ago)
141
- # end
142
- # row 'Less than a year' do
143
- # with(:published_at, 1.year.ago..1.month.ago)
144
- # end
145
- # row 'More than a year' do
146
- # with(:published_at).less_than(1.year.ago)
147
- # end
148
- # end
149
- # end
150
- # search.facet(:category_ids)
151
- # #=> Facet for :category_ids field
152
- # search.facet(:custom, :cuisine)
153
- # #=> Facet for the dynamic field :cuisine in the :custom field definition
154
- # search.facet(:age)
155
- # #=> Facet for the query facet named :age
156
- #
157
- def facet(name, dynamic_name = nil)
158
- if name
159
- if dynamic_name
160
- @facets_by_name[:"#{name}:#{dynamic_name}"]
161
- else
162
- @facets_by_name[name.to_sym]
163
- end
164
- end
165
- end
166
-
167
- def group(name)
168
- if name
169
- @groups_by_name[name.to_sym]
170
- end
171
- end
172
-
173
- #
174
- # Deprecated in favor of optional second argument to #facet
175
- #
176
- def dynamic_facet(base_name, dynamic_name) #:nodoc:
177
- facet(base_name, dynamic_name)
178
- end
179
-
180
- def facet_response #:nodoc:
181
- @solr_result['facet_counts']
182
- end
183
-
184
- def group_response #:nodoc:
185
- @solr_result['grouped']
186
- end
187
-
188
- #
189
- # Build this search using a DSL block. This method can be called more than
190
- # once on an unexecuted search (e.g., Sunspot.new_search) in order to build
191
- # a search incrementally.
192
- #
193
- # === Example
194
- #
195
- # search = Sunspot.new_search(Post)
196
- # search.build do
197
- # with(:published_at).less_than Time.now
198
- # end
199
- # search.execute
200
- #
201
- def build(&block)
202
- Util.instance_eval_or_call(dsl, &block)
203
- self
204
- end
205
-
206
-
207
- def inspect #:nodoc:
208
- "<Sunspot::Search:#{query.to_params.inspect}>"
209
- end
210
-
211
- def add_field_group(field) #:nodoc:
212
- add_group(field.name, FieldGroup.new(field, self))
213
- end
214
-
215
- def add_field_facet(field, options = {}) #:nodoc:
216
- name = (options[:name] || field.name)
217
- add_facet(name, FieldFacet.new(field, self, options))
218
- end
219
-
220
- def add_query_facet(name, options) #:nodoc:
221
- add_facet(name, QueryFacet.new(name, self, options))
222
- end
223
-
224
- def add_date_facet(field, options) #:nodoc:
225
- name = (options[:name] || field.name)
226
- add_facet(name, DateFacet.new(field, self, options))
227
- end
228
-
229
- def add_range_facet(field, options) #:nodoc:
230
- name = (options[:name] || field.name)
231
- add_facet(name, RangeFacet.new(field, self, options))
232
- end
233
-
234
- def highlights_for(doc) #:nodoc:
235
- if @solr_result['highlighting']
236
- @solr_result['highlighting'][doc['id']]
237
- end
238
- end
239
-
240
- private
241
-
242
- def dsl
243
- raise NotImplementedError
244
- end
245
-
246
- def execute_request(params)
247
- raise NotImplementedError
248
- end
249
-
250
- def solr_response
251
- @solr_response ||= @solr_result['response'] || {}
252
- end
253
-
254
- def solr_response_header
255
- @solr_response_header ||= @solr_result['responseHeader'] || {}
256
- end
257
-
258
- def solr_docs
259
- solr_response['docs']
260
- end
261
-
262
- def verified_hits
263
- @verified_hits ||= paginate_collection(super)
264
- end
265
-
266
- def paginate_collection(collection)
267
- PaginatedCollection.new(collection, @query.page, @query.per_page, total)
268
- end
269
-
270
- def add_facet(name, facet)
271
- @facets << facet
272
- @facets_by_name[name.to_sym] = facet
273
- end
274
-
275
- def add_group(name, group)
276
- @groups << group
277
- @groups_by_name[name.to_sym] = group
278
- end
279
-
280
- # Clear out all the cached ivars so the search can be called again.
281
- def reset
282
- @results = @hits = @verified_hits = @total = @solr_response = @doc_ids = nil
283
- end
284
- end
285
- end
286
- end