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,103 +0,0 @@
1
- module Sunspot
2
- module DSL #:nodoc:
3
- # The Fields class provides a DSL for specifying field definitions in the
4
- # Sunspot.setup block. As well as the #text method, which creates fulltext
5
- # fields, uses #method_missing to allow definition of typed fields. The
6
- # available methods are determined by the constants defined in
7
- # Sunspot::Type - in theory (though this is untested), plugin developers
8
- # should be able to add support for new types simply by creating new
9
- # implementations in Sunspot::Type
10
- #
11
- class Fields
12
- def initialize(setup) #:nodoc:
13
- @setup = setup
14
- end
15
-
16
- # Add a text field. Text fields are tokenized before indexing and are
17
- # the only fields searched in fulltext searches. If a block is passed,
18
- # create a virtual field; otherwise create an attribute field.
19
- #
20
- # If options are passed, they will be applied to all the given fields.
21
- #
22
- # ==== Parameters
23
- #
24
- # names...<Symbol>:: One or more field names
25
- #
26
- # ==== Options
27
- #
28
- # :boost<Float>::
29
- # Index-time boost that should be applied to this field for keyword search
30
- # :default_boost<Float>::
31
- # Default search-time boost to apply to this field during keyword
32
- # search. Can be overriden with DSL::Fulltext#fields or
33
- # DSL::Fulltext#boost_fields method.
34
- #
35
- def text(*names, &block)
36
- options = names.pop if names.last.is_a?(Hash)
37
- names.each do |name|
38
- @setup.add_text_field_factory(
39
- name,
40
- options || {},
41
- &block
42
- )
43
- end
44
- end
45
-
46
- #
47
- # Specify a document-level boost. As with fields, you have the option of
48
- # passing an attribute name which will be called on each model, or a block
49
- # to be evaluated in the model's context. As well as these two options,
50
- # this method can also take a constant number, meaning that all indexed
51
- # documents of this class will have the specified boost.
52
- #
53
- # ==== Parameters
54
- #
55
- # attr_name<Symbol,~.to_f>:: Attribute name to call or a numeric constant
56
- #
57
- def boost(attr_name = nil, &block)
58
- @setup.add_document_boost(attr_name, &block)
59
- end
60
-
61
- # method_missing is used to provide access to typed fields, because
62
- # developers should be able to add new Sunspot::Type implementations
63
- # dynamically and have them recognized inside the Fields DSL. Like #text,
64
- # these methods will create a VirtualField if a block is passed, or an
65
- # AttributeField if not.
66
- #
67
- # ==== Example
68
- #
69
- # Sunspot.setup(File) do
70
- # time :mtime
71
- # end
72
- #
73
- # The call to +time+ will create a field of type Sunspot::Types::TimeType
74
- #
75
- def method_missing(method, *args, &block)
76
- options = Util.extract_options_from(args)
77
- type_const_name = "#{Util.camel_case(method.to_s.sub(/^dynamic_/, ''))}Type"
78
- trie = options.delete(:trie)
79
- type_const_name = "Trie#{type_const_name}" if trie
80
- begin
81
- type_class = Type.const_get(type_const_name)
82
- rescue(NameError)
83
- if trie
84
- raise ArgumentError, "Trie fields are only valid for numeric and time types"
85
- else
86
- super(method, *args, &block)
87
- end
88
- end
89
- type = type_class.instance
90
- name = args.shift
91
- if method.to_s =~ /^dynamic_/
92
- if type.accepts_dynamic?
93
- @setup.add_dynamic_field_factory(name, type, options, &block)
94
- else
95
- super(method, *args, &block)
96
- end
97
- else
98
- @setup.add_field_factory(name, type, options, &block)
99
- end
100
- end
101
- end
102
- end
103
- end
@@ -1,243 +0,0 @@
1
- module Sunspot
2
- module DSL
3
- #
4
- # This DSL exposes the functionality provided by Solr's fulltext Dismax
5
- # handler.
6
- #
7
- class Fulltext
8
- attr_reader :exclude_fields #:nodoc:
9
-
10
- # accept function in boost
11
- include Functional
12
-
13
- def initialize(query, setup) #:nodoc:
14
- @query, @setup = query, setup
15
- @fields_added = false
16
- @exclude_fields = []
17
- end
18
-
19
- #
20
- # Specify which fields to search. Field names specified as arguments are
21
- # given default boost; field boosts can be specified by passing a hash of
22
- # field names keyed to boost values as the last argument.
23
- #
24
- # If you wish to boost certain fields without restricting which fields are
25
- # searched, use #boost_fields
26
- #
27
- # === Example
28
- #
29
- # Sunspot.search(Post) do
30
- # keywords 'search is cool' do
31
- # fields(:body, :title => 2.0)
32
- # end
33
- # end
34
- #
35
- # This would search the :body field with default boost (1.0), and the :title
36
- # field with a boost of 2.0
37
- #
38
- def fields(*field_names)
39
- @fields_added = true
40
- boosted_fields = field_names.pop if field_names.last.is_a?(Hash)
41
- field_names.each do |field_name|
42
- @setup.text_fields(field_name).each do |field|
43
- @query.add_fulltext_field(field, field.default_boost)
44
- end
45
- end
46
- if boosted_fields
47
- boosted_fields.each_pair do |field_name, boost|
48
- @setup.text_fields(field_name).each do |field|
49
- @query.add_fulltext_field(field, boost)
50
- end
51
- end
52
- end
53
- end
54
-
55
- #
56
- # Exclude the given fields from the search. All fields that are configured
57
- # for the types under search and not listed here will be searched.
58
- #
59
- def exclude_fields(*field_names)
60
- @exclude_fields.concat(field_names)
61
- end
62
-
63
- #
64
- # Enable keyword highlighting for this search. By default, the fields
65
- # under search will be highlighted; you may also may pass one or more
66
- # symbol arguments indicating fields to be highlighted (they don't even
67
- # have to be the same fields you're searching).
68
- #
69
- # === Example
70
- #
71
- # Sunspot.search(Post) do
72
- # keywords 'show me the highlighting' do
73
- # highlight :title, :body
74
- # end
75
- # end
76
- #
77
- # You may also pass a hash of options as the last argument. Options are
78
- # the following:
79
- #
80
- # Full disclosure: I barely understand what these options actually do;
81
- # this documentation is pretty much just copied from the
82
- # (http://wiki.apache.org/solr/HighlightingParameters#head-23ecd5061bc2c86a561f85dc1303979fe614b956)[Solr Wiki]
83
- #
84
- # :max_snippets::
85
- # The maximum number of highlighted snippets to generate per field
86
- # :fragment_size::
87
- # The number of characters to consider for a highlighted fragment
88
- # :merge_continuous_fragments::
89
- # Collapse continuous fragments into a single fragment
90
- # :phrase_highlighter::
91
- # Highlight phrase terms only when they appear within the query phrase
92
- # in the document
93
- # :require_field_match::
94
- # If true, a field will only be highlighted if the query matched in
95
- # this particular field (only has an effect if :phrase_highlighter is
96
- # true as well)
97
- #
98
- def highlight(*args)
99
- options = args.last.kind_of?(Hash) ? args.pop : {}
100
- fields = []
101
- args.each { |field_name| fields.concat(@setup.text_fields(field_name)) }
102
-
103
- @query.add_highlight(fields, options)
104
- end
105
-
106
- #
107
- # Phrase fields are an awesome dismax feature that adds extra boost to
108
- # documents for which all the fulltext keywords appear in close proximity
109
- # in one of the given fields. Excellent for titles, headlines, etc.
110
- #
111
- # Boosted fields are specified in a hash of field names to a boost, as
112
- # with the #fields and #boost_fields methods.
113
- #
114
- # === Example
115
- #
116
- # Sunspot.search(Post) do
117
- # keywords 'nothing reveals like relevance' do
118
- # phrase_fields :title => 2.0
119
- # end
120
- # end
121
- #
122
- def phrase_fields(boosted_fields)
123
- if boosted_fields
124
- boosted_fields.each_pair do |field_name, boost|
125
- @setup.text_fields(field_name).each do |field|
126
- @query.add_phrase_field(field, boost)
127
- end
128
- end
129
- end
130
- end
131
-
132
- #
133
- # The maximum number of words that can appear between search terms for a
134
- # field to qualify for phrase field boost. See #query_phrase_slop for
135
- # examples. Phrase slop is only meaningful if phrase fields are specified
136
- # (see #phrase_fields), and it does not have an effect on which results
137
- # are returned; only on what their respective boosts are.
138
- #
139
- def phrase_slop(slop)
140
- @query.phrase_slop = slop
141
- end
142
-
143
- #
144
- # Boost queries allow specification of an arbitrary scope for which
145
- # matching documents should receive an extra boost. You can either specify
146
- # a boost factor and a block, or a boost function. The block is evaluated
147
- # in the usual scope DSL, and field names are attribute fields, not text
148
- # fields, as in other scope.
149
- #
150
- # The boost function can be a constant (numeric or string literal),
151
- # a field name or another function. You can build arbitrarily complex
152
- # functions, which are passed transparently to solr.
153
- #
154
- # This method can be called more than once for different boost queries
155
- # with different boosts.
156
- #
157
- # === Example
158
- #
159
- # Sunspot.search(Post) do
160
- # keywords 'super fan' do
161
- # boost(2.0) do
162
- # with(:featured, true)
163
- # end
164
- #
165
- # boost(function { sum(:average_rating, product(:popularity, 10)) })
166
- # end
167
- # end
168
- #
169
- # In the above search, featured posts will receive a boost of 2.0 and all posts
170
- # will be boosted by (average_rating + popularity * 10).
171
- #
172
- def boost(factor_or_function, &block)
173
- if factor_or_function.is_a?(Sunspot::Query::FunctionQuery)
174
- @query.add_boost_function(factor_or_function)
175
- else
176
- Sunspot::Util.instance_eval_or_call(
177
- Scope.new(@query.create_boost_query(factor_or_function), @setup),
178
- &block
179
- )
180
- end
181
- end
182
-
183
- #
184
- # Add boost to certain fields, without restricting which fields are
185
- # searched.
186
- #
187
- # === Example
188
- #
189
- # Sunspot.search(Post) do
190
- # keywords('pork sandwich') do
191
- # boost_fields :title => 1.5
192
- # end
193
- # end
194
- #
195
- def boost_fields(boosts)
196
- boosts.each_pair do |field_name, boost|
197
- begin
198
- @setup.text_fields(field_name).each do |field|
199
- @query.add_fulltext_field(field, boost)
200
- end
201
- rescue Sunspot::UnrecognizedFieldError
202
- # We'll let this one slide.
203
- end
204
- end
205
- end
206
-
207
- #
208
- # The minimum number of search terms that a result must match. By
209
- # default, all search terms must match; if the number of search terms
210
- # is less than this number, the default behavior applies.
211
- #
212
- def minimum_match(minimum_match)
213
- @query.minimum_match = minimum_match
214
- end
215
-
216
- #
217
- # The number of words that can appear between the words in a
218
- # user-entered phrase (i.e., keywords in quotes) and still match. For
219
- # instance, in a search for "\"great pizza\"" with a query phrase slop of
220
- # 1, "great pizza" and "great big pizza" will match, but "great monster of
221
- # a pizza" will not. Default behavior is a query phrase slop of zero.
222
- #
223
- def query_phrase_slop(slop)
224
- @query.query_phrase_slop = slop
225
- end
226
-
227
- #
228
- # A tiebreaker coefficient for scores derived from subqueries that are
229
- # lower-scoring than the maximum score subquery. Typically a near-zero
230
- # value is useful. See
231
- # http://wiki.apache.org/solr/DisMaxRequestHandler#tie_.28Tie_breaker.29
232
- # for more information.
233
- #
234
- def tie(tie)
235
- @query.tie = tie
236
- end
237
-
238
- def fields_added? #:nodoc:
239
- @fields_added
240
- end
241
- end
242
- end
243
- end
@@ -1,27 +0,0 @@
1
- module Sunspot
2
- module DSL
3
- class Function #:nodoc:
4
- def initialize(functional) #:nodoc:
5
- @functional = functional
6
- end
7
-
8
- # Special case to handle <http://wiki.apache.org/solr/FunctionQuery#sub>
9
- # because `Kernel#sub` exists so `method_missing` will not be called
10
- # for this function.
11
- def sub(*args) #:nodoc:
12
- create_function_query(:sub, *args)
13
- end
14
-
15
- def method_missing(method, *args, &block)
16
- create_function_query(method, *args)
17
- end
18
-
19
- private
20
-
21
- def create_function_query(method, *args)
22
- function_args = args.map { |arg| @functional.create_function_query(arg) }
23
- Sunspot::Query::FunctionalFunctionQuery.new(method, function_args)
24
- end
25
- end
26
- end
27
- end
@@ -1,44 +0,0 @@
1
- module Sunspot
2
- module DSL
3
- #
4
- # Mixin DSL to accept functions.
5
- #
6
- module Functional
7
-
8
- #
9
- # Specify a function query with a block that returns an expression.
10
- #
11
- # === Examples
12
- #
13
- # function { 10 }
14
- # function { :average_rating }
15
- # function { sum(:average_rating, 10) }
16
- #
17
- # See http://wiki.apache.org/solr/FunctionQuery for a list of all
18
- # applicable functions
19
- #
20
- def function(&block)
21
- expression = Sunspot::Util.instance_eval_or_call(
22
- Function.new(self),
23
- &block
24
- )
25
- create_function_query(expression)
26
- end
27
-
28
- #
29
- # Creates an AbstractFunctionQuery from an expression, also called by
30
- # Sunspot::DSL::Function
31
- #
32
- def create_function_query(expression) #:nodoc:
33
- if expression.is_a?(Sunspot::Query::FunctionQuery)
34
- expression
35
- elsif expression.is_a?(Symbol)
36
- Sunspot::Query::FieldFunctionQuery.new(@setup.field(expression))
37
- else
38
- Sunspot::Query::ConstantFunctionQuery.new(expression)
39
- end
40
- end
41
- end
42
- end
43
- end
44
-
@@ -1,56 +0,0 @@
1
- module Sunspot
2
- module DSL #:nodoc:
3
- #
4
- # This class provides the DSL for MoreLikeThis queries.
5
- #
6
- class MoreLikeThisQuery < FieldQuery
7
- include Paginatable, Adjustable
8
-
9
- def fields(*field_names)
10
- boosted_fields = field_names.pop if field_names.last.is_a?(Hash)
11
- field_names.each do |name|
12
- mlt_fields = @setup.more_like_this_fields(name)
13
- raise(ArgumentError, "Field #{name} is not setup for more_like_this") if mlt_fields.empty?
14
- mlt_fields.each { |field| @query.more_like_this.add_field(field) }
15
- end
16
- if boosted_fields
17
- boosted_fields.each_pair do |field_name, boost|
18
- @setup.more_like_this_fields(field_name).each do |field|
19
- @query.more_like_this.add_field(field, boost)
20
- end
21
- end
22
- end
23
- end
24
-
25
- def minimum_term_frequency(value)
26
- @query.more_like_this.minimum_term_frequency = value
27
- end
28
- alias_method :mintf, :minimum_term_frequency
29
-
30
- def minimum_document_frequency(value)
31
- @query.more_like_this.minimum_document_frequency = value
32
- end
33
- alias_method :mindf, :minimum_document_frequency
34
-
35
- def minimum_word_length(value)
36
- @query.more_like_this.minimum_word_length = value
37
- end
38
- alias_method :minwl, :minimum_word_length
39
-
40
- def maximum_word_length(value)
41
- @query.more_like_this.maximum_word_length = value
42
- end
43
- alias_method :maxwl, :maximum_word_length
44
-
45
- def maximum_query_terms(value)
46
- @query.more_like_this.maximum_query_terms = value
47
- end
48
- alias_method :maxqt, :maximum_query_terms
49
-
50
- def boost_by_relevance(should_boost)
51
- @query.more_like_this.boost_by_relevance = should_boost
52
- end
53
- alias_method :boost, :boost_by_relevance
54
- end
55
- end
56
- end