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.
- data/.gitignore +6 -10
- data/{sunspot_rails/.rspec → .rspec} +0 -0
- data/{sunspot_rails/History.txt → History.txt} +0 -0
- data/{sunspot/LICENSE → LICENSE} +0 -0
- data/{sunspot_rails/MIT-LICENSE → MIT-LICENSE} +0 -0
- data/{sunspot_rails/README.rdoc → README.rdoc} +0 -0
- data/Rakefile +12 -32
- data/{sunspot_rails/TODO → TODO} +0 -0
- data/{sunspot_rails/dev_tasks → dev_tasks}/rdoc.rake +0 -0
- data/{sunspot_rails/dev_tasks → dev_tasks}/release.rake +0 -0
- data/{sunspot_rails/dev_tasks → dev_tasks}/spec.rake +0 -0
- data/{sunspot/tasks → dev_tasks}/todo.rake +0 -0
- data/{sunspot_rails/gemfiles → gemfiles}/rails-2.3.14 +0 -0
- data/{sunspot_rails/gemfiles → gemfiles}/rails-3.0.15 +0 -0
- data/{sunspot_rails/gemfiles → gemfiles}/rails-3.1.6 +0 -0
- data/{sunspot_rails/gemfiles → gemfiles}/rails-3.2.6 +0 -0
- data/{sunspot_rails/generators → generators}/sunspot/sunspot_generator.rb +0 -0
- data/{sunspot_rails/generators → generators}/sunspot/templates/sunspot.yml +0 -0
- data/{sunspot_rails/install.rb → install.rb} +0 -0
- data/{sunspot_rails/lib → lib}/generators/sunspot_rails.rb +0 -0
- data/{sunspot_rails/lib → lib}/generators/sunspot_rails/install/install_generator.rb +0 -0
- data/{sunspot_rails/lib → lib}/generators/sunspot_rails/install/templates/config/sunspot.yml +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/adapters.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/configuration.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/init.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/log_subscriber.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/railtie.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/railties/controller_runtime.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/request_lifecycle.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/searchable.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/server.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/solr_instrumentation.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/solr_logging.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/spec_helper.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/stub_session_proxy.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot/rails/tasks.rb +0 -0
- data/{sunspot_rails/lib → lib}/sunspot_rails.rb +0 -0
- data/{sunspot_rails/spec → spec}/configuration_spec.rb +0 -0
- data/{sunspot_rails/spec → spec}/model_lifecycle_spec.rb +0 -0
- data/{sunspot_rails/spec → spec}/model_spec.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/controllers/application_controller.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/controllers/posts_controller.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/models/author.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/models/blog.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/models/location.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/models/photo_post.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/models/post.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/models/post_with_auto.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/app/models/post_with_default_scope.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/config/boot.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/config/preinitializer.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/config/routes.rb +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/config/sunspot.yml +0 -0
- data/{sunspot_rails/spec → spec}/rails_template/db/schema.rb +0 -0
- data/{sunspot_rails/spec → spec}/request_lifecycle_spec.rb +0 -0
- data/{sunspot_rails/spec → spec}/schema.rb +0 -0
- data/{sunspot_rails/spec → spec}/searchable_spec.rb +0 -0
- data/{sunspot_rails/spec → spec}/server_spec.rb +0 -0
- data/{sunspot_rails/spec → spec}/session_spec.rb +0 -0
- data/{sunspot_rails/spec → spec}/shared_examples/indexed_after_save.rb +0 -0
- data/{sunspot_rails/spec → spec}/shared_examples/not_indexed_after_save.rb +0 -0
- data/{sunspot_rails/spec → spec}/spec_helper.rb +0 -0
- data/{sunspot_rails/spec → spec}/stub_session_proxy_spec.rb +0 -0
- data/{sunspot_rails/sunspot_rails.gemspec → sunspot_rails.gemspec} +0 -0
- metadata +102 -305
- data/.travis.yml +0 -35
- data/README.md +0 -863
- data/ci/travis.sh +0 -67
- data/sunspot/.gitignore +0 -13
- data/sunspot/Gemfile +0 -5
- data/sunspot/History.txt +0 -258
- data/sunspot/Rakefile +0 -13
- data/sunspot/TODO +0 -13
- data/sunspot/lib/light_config.rb +0 -40
- data/sunspot/lib/sunspot.rb +0 -579
- data/sunspot/lib/sunspot/adapters.rb +0 -349
- data/sunspot/lib/sunspot/batcher.rb +0 -62
- data/sunspot/lib/sunspot/class_set.rb +0 -23
- data/sunspot/lib/sunspot/composite_setup.rb +0 -202
- data/sunspot/lib/sunspot/configuration.rb +0 -53
- data/sunspot/lib/sunspot/data_extractor.rb +0 -50
- data/sunspot/lib/sunspot/dsl.rb +0 -5
- data/sunspot/lib/sunspot/dsl/adjustable.rb +0 -47
- data/sunspot/lib/sunspot/dsl/field_group.rb +0 -57
- data/sunspot/lib/sunspot/dsl/field_query.rb +0 -345
- data/sunspot/lib/sunspot/dsl/fields.rb +0 -103
- data/sunspot/lib/sunspot/dsl/fulltext.rb +0 -243
- data/sunspot/lib/sunspot/dsl/function.rb +0 -27
- data/sunspot/lib/sunspot/dsl/functional.rb +0 -44
- data/sunspot/lib/sunspot/dsl/more_like_this_query.rb +0 -56
- data/sunspot/lib/sunspot/dsl/paginatable.rb +0 -32
- data/sunspot/lib/sunspot/dsl/query_facet.rb +0 -36
- data/sunspot/lib/sunspot/dsl/restriction.rb +0 -25
- data/sunspot/lib/sunspot/dsl/restriction_with_near.rb +0 -160
- data/sunspot/lib/sunspot/dsl/scope.rb +0 -214
- data/sunspot/lib/sunspot/dsl/search.rb +0 -30
- data/sunspot/lib/sunspot/dsl/standard_query.rb +0 -122
- data/sunspot/lib/sunspot/field.rb +0 -193
- data/sunspot/lib/sunspot/field_factory.rb +0 -129
- data/sunspot/lib/sunspot/indexer.rb +0 -136
- data/sunspot/lib/sunspot/query.rb +0 -11
- data/sunspot/lib/sunspot/query/abstract_field_facet.rb +0 -55
- data/sunspot/lib/sunspot/query/bbox.rb +0 -15
- data/sunspot/lib/sunspot/query/boost_query.rb +0 -24
- data/sunspot/lib/sunspot/query/common_query.rb +0 -96
- data/sunspot/lib/sunspot/query/composite_fulltext.rb +0 -36
- data/sunspot/lib/sunspot/query/connective.rb +0 -206
- data/sunspot/lib/sunspot/query/date_field_facet.rb +0 -14
- data/sunspot/lib/sunspot/query/dismax.rb +0 -132
- data/sunspot/lib/sunspot/query/field_facet.rb +0 -41
- data/sunspot/lib/sunspot/query/field_group.rb +0 -37
- data/sunspot/lib/sunspot/query/filter.rb +0 -38
- data/sunspot/lib/sunspot/query/function_query.rb +0 -52
- data/sunspot/lib/sunspot/query/geo.rb +0 -53
- data/sunspot/lib/sunspot/query/geofilt.rb +0 -16
- data/sunspot/lib/sunspot/query/highlighting.rb +0 -62
- data/sunspot/lib/sunspot/query/more_like_this.rb +0 -61
- data/sunspot/lib/sunspot/query/more_like_this_query.rb +0 -12
- data/sunspot/lib/sunspot/query/pagination.rb +0 -42
- data/sunspot/lib/sunspot/query/query_facet.rb +0 -53
- data/sunspot/lib/sunspot/query/range_facet.rb +0 -15
- data/sunspot/lib/sunspot/query/restriction.rb +0 -308
- data/sunspot/lib/sunspot/query/scope.rb +0 -9
- data/sunspot/lib/sunspot/query/sort.rb +0 -109
- data/sunspot/lib/sunspot/query/sort_composite.rb +0 -34
- data/sunspot/lib/sunspot/query/standard_query.rb +0 -16
- data/sunspot/lib/sunspot/query/text_field_boost.rb +0 -17
- data/sunspot/lib/sunspot/schema.rb +0 -151
- data/sunspot/lib/sunspot/search.rb +0 -9
- data/sunspot/lib/sunspot/search/abstract_search.rb +0 -286
- data/sunspot/lib/sunspot/search/date_facet.rb +0 -35
- data/sunspot/lib/sunspot/search/facet_row.rb +0 -27
- data/sunspot/lib/sunspot/search/field_facet.rb +0 -88
- data/sunspot/lib/sunspot/search/field_group.rb +0 -70
- data/sunspot/lib/sunspot/search/group.rb +0 -54
- data/sunspot/lib/sunspot/search/highlight.rb +0 -38
- data/sunspot/lib/sunspot/search/hit.rb +0 -150
- data/sunspot/lib/sunspot/search/hit_enumerable.rb +0 -68
- data/sunspot/lib/sunspot/search/more_like_this_search.rb +0 -31
- data/sunspot/lib/sunspot/search/paginated_collection.rb +0 -57
- data/sunspot/lib/sunspot/search/query_facet.rb +0 -67
- data/sunspot/lib/sunspot/search/range_facet.rb +0 -37
- data/sunspot/lib/sunspot/search/standard_search.rb +0 -21
- data/sunspot/lib/sunspot/session.rb +0 -262
- data/sunspot/lib/sunspot/session_proxy.rb +0 -95
- data/sunspot/lib/sunspot/session_proxy/abstract_session_proxy.rb +0 -29
- data/sunspot/lib/sunspot/session_proxy/class_sharding_session_proxy.rb +0 -66
- data/sunspot/lib/sunspot/session_proxy/id_sharding_session_proxy.rb +0 -89
- data/sunspot/lib/sunspot/session_proxy/master_slave_session_proxy.rb +0 -43
- data/sunspot/lib/sunspot/session_proxy/retry_5xx_session_proxy.rb +0 -67
- data/sunspot/lib/sunspot/session_proxy/sharding_session_proxy.rb +0 -222
- data/sunspot/lib/sunspot/session_proxy/silent_fail_session_proxy.rb +0 -42
- data/sunspot/lib/sunspot/session_proxy/thread_local_session_proxy.rb +0 -37
- data/sunspot/lib/sunspot/setup.rb +0 -350
- data/sunspot/lib/sunspot/text_field_setup.rb +0 -29
- data/sunspot/lib/sunspot/type.rb +0 -393
- data/sunspot/lib/sunspot/util.rb +0 -252
- data/sunspot/lib/sunspot/version.rb +0 -3
- data/sunspot/script/console +0 -10
- data/sunspot/spec/api/adapters_spec.rb +0 -68
- data/sunspot/spec/api/batcher_spec.rb +0 -112
- data/sunspot/spec/api/binding_spec.rb +0 -50
- data/sunspot/spec/api/class_set_spec.rb +0 -24
- data/sunspot/spec/api/hit_enumerable_spec.rb +0 -47
- data/sunspot/spec/api/indexer/attributes_spec.rb +0 -149
- data/sunspot/spec/api/indexer/batch_spec.rb +0 -72
- data/sunspot/spec/api/indexer/dynamic_fields_spec.rb +0 -42
- data/sunspot/spec/api/indexer/fixed_fields_spec.rb +0 -57
- data/sunspot/spec/api/indexer/fulltext_spec.rb +0 -43
- data/sunspot/spec/api/indexer/removal_spec.rb +0 -53
- data/sunspot/spec/api/indexer/spec_helper.rb +0 -1
- data/sunspot/spec/api/indexer_spec.rb +0 -14
- data/sunspot/spec/api/query/advanced_manipulation_examples.rb +0 -35
- data/sunspot/spec/api/query/connectives_examples.rb +0 -201
- data/sunspot/spec/api/query/dsl_spec.rb +0 -18
- data/sunspot/spec/api/query/dynamic_fields_examples.rb +0 -165
- data/sunspot/spec/api/query/faceting_examples.rb +0 -497
- data/sunspot/spec/api/query/fulltext_examples.rb +0 -313
- data/sunspot/spec/api/query/function_spec.rb +0 -79
- data/sunspot/spec/api/query/geo_examples.rb +0 -68
- data/sunspot/spec/api/query/group_spec.rb +0 -32
- data/sunspot/spec/api/query/highlighting_examples.rb +0 -245
- data/sunspot/spec/api/query/more_like_this_spec.rb +0 -140
- data/sunspot/spec/api/query/ordering_pagination_examples.rb +0 -116
- data/sunspot/spec/api/query/scope_examples.rb +0 -275
- data/sunspot/spec/api/query/spatial_examples.rb +0 -27
- data/sunspot/spec/api/query/spec_helper.rb +0 -1
- data/sunspot/spec/api/query/standard_spec.rb +0 -29
- data/sunspot/spec/api/query/text_field_scoping_examples.rb +0 -30
- data/sunspot/spec/api/query/types_spec.rb +0 -20
- data/sunspot/spec/api/search/dynamic_fields_spec.rb +0 -33
- data/sunspot/spec/api/search/faceting_spec.rb +0 -360
- data/sunspot/spec/api/search/highlighting_spec.rb +0 -69
- data/sunspot/spec/api/search/hits_spec.rb +0 -147
- data/sunspot/spec/api/search/paginated_collection_spec.rb +0 -36
- data/sunspot/spec/api/search/results_spec.rb +0 -72
- data/sunspot/spec/api/search/search_spec.rb +0 -23
- data/sunspot/spec/api/search/spec_helper.rb +0 -1
- data/sunspot/spec/api/session_proxy/class_sharding_session_proxy_spec.rb +0 -85
- data/sunspot/spec/api/session_proxy/id_sharding_session_proxy_spec.rb +0 -30
- data/sunspot/spec/api/session_proxy/master_slave_session_proxy_spec.rb +0 -41
- data/sunspot/spec/api/session_proxy/retry_5xx_session_proxy_spec.rb +0 -78
- data/sunspot/spec/api/session_proxy/sharding_session_proxy_spec.rb +0 -77
- data/sunspot/spec/api/session_proxy/silent_fail_session_proxy_spec.rb +0 -24
- data/sunspot/spec/api/session_proxy/spec_helper.rb +0 -9
- data/sunspot/spec/api/session_proxy/thread_local_session_proxy_spec.rb +0 -39
- data/sunspot/spec/api/session_spec.rb +0 -232
- data/sunspot/spec/api/spec_helper.rb +0 -3
- data/sunspot/spec/api/sunspot_spec.rb +0 -29
- data/sunspot/spec/ext.rb +0 -11
- data/sunspot/spec/helpers/indexer_helper.rb +0 -17
- data/sunspot/spec/helpers/integration_helper.rb +0 -8
- data/sunspot/spec/helpers/mock_session_helper.rb +0 -13
- data/sunspot/spec/helpers/query_helper.rb +0 -26
- data/sunspot/spec/helpers/search_helper.rb +0 -68
- data/sunspot/spec/integration/dynamic_fields_spec.rb +0 -57
- data/sunspot/spec/integration/faceting_spec.rb +0 -330
- data/sunspot/spec/integration/field_grouping_spec.rb +0 -100
- data/sunspot/spec/integration/geospatial_spec.rb +0 -96
- data/sunspot/spec/integration/highlighting_spec.rb +0 -44
- data/sunspot/spec/integration/indexing_spec.rb +0 -55
- data/sunspot/spec/integration/keyword_search_spec.rb +0 -317
- data/sunspot/spec/integration/local_search_spec.rb +0 -64
- data/sunspot/spec/integration/more_like_this_spec.rb +0 -43
- data/sunspot/spec/integration/scoped_search_spec.rb +0 -386
- data/sunspot/spec/integration/stored_fields_spec.rb +0 -12
- data/sunspot/spec/integration/test_pagination.rb +0 -43
- data/sunspot/spec/integration/unicode_spec.rb +0 -15
- data/sunspot/spec/mocks/adapters.rb +0 -33
- data/sunspot/spec/mocks/blog.rb +0 -3
- data/sunspot/spec/mocks/comment.rb +0 -21
- data/sunspot/spec/mocks/connection.rb +0 -126
- data/sunspot/spec/mocks/mock_adapter.rb +0 -30
- data/sunspot/spec/mocks/mock_class_sharding_session_proxy.rb +0 -24
- data/sunspot/spec/mocks/mock_record.rb +0 -52
- data/sunspot/spec/mocks/mock_sharding_session_proxy.rb +0 -15
- data/sunspot/spec/mocks/photo.rb +0 -11
- data/sunspot/spec/mocks/post.rb +0 -86
- data/sunspot/spec/mocks/super_class.rb +0 -2
- data/sunspot/spec/mocks/user.rb +0 -13
- data/sunspot/spec/spec_helper.rb +0 -40
- data/sunspot/sunspot.gemspec +0 -37
- data/sunspot/tasks/rdoc.rake +0 -27
- data/sunspot/tasks/schema.rake +0 -19
- data/sunspot_rails/.gitignore +0 -7
- data/sunspot_rails/LICENSE +0 -18
- data/sunspot_rails/Rakefile +0 -17
- data/sunspot_rails/dev_tasks/todo.rake +0 -4
- data/sunspot_solr/Gemfile +0 -3
- data/sunspot_solr/README.rdoc +0 -24
- data/sunspot_solr/bin/sunspot-installer +0 -20
- data/sunspot_solr/bin/sunspot-solr +0 -80
- data/sunspot_solr/lib/sunspot/solr/installer.rb +0 -25
- data/sunspot_solr/lib/sunspot/solr/installer/config_installer.rb +0 -46
- data/sunspot_solr/lib/sunspot/solr/installer/task_helper.rb +0 -13
- data/sunspot_solr/lib/sunspot/solr/java.rb +0 -10
- data/sunspot_solr/lib/sunspot/solr/railtie.rb +0 -15
- data/sunspot_solr/lib/sunspot/solr/server.rb +0 -223
- data/sunspot_solr/lib/sunspot/solr/tasks.rb +0 -49
- data/sunspot_solr/lib/sunspot_solr.rb +0 -5
- data/sunspot_solr/solr/README.txt +0 -42
- data/sunspot_solr/solr/etc/jetty.xml +0 -219
- data/sunspot_solr/solr/etc/webdefault.xml +0 -379
- data/sunspot_solr/solr/lib/jetty-6.1.26-patched-JETTY-1340.jar +0 -0
- data/sunspot_solr/solr/lib/jetty-util-6.1.26-patched-JETTY-1340.jar +0 -0
- data/sunspot_solr/solr/lib/jsp-2.1/ant-1.6.5.jar +0 -0
- data/sunspot_solr/solr/lib/jsp-2.1/core-3.1.1.jar +0 -0
- data/sunspot_solr/solr/lib/jsp-2.1/jsp-2.1.jar +0 -0
- data/sunspot_solr/solr/lib/jsp-2.1/jsp-api-2.1.jar +0 -0
- data/sunspot_solr/solr/lib/servlet-api-2.5-20081211.jar +0 -0
- data/sunspot_solr/solr/solr/.gitignore +0 -1
- data/sunspot_solr/solr/solr/README.txt +0 -54
- data/sunspot_solr/solr/solr/conf/admin-extra.html +0 -31
- data/sunspot_solr/solr/solr/conf/elevate.xml +0 -36
- data/sunspot_solr/solr/solr/conf/mapping-ISOLatin1Accent.txt +0 -246
- data/sunspot_solr/solr/solr/conf/protwords.txt +0 -21
- data/sunspot_solr/solr/solr/conf/schema.xml +0 -250
- data/sunspot_solr/solr/solr/conf/scripts.conf +0 -24
- data/sunspot_solr/solr/solr/conf/solrconfig.xml +0 -934
- data/sunspot_solr/solr/solr/conf/spellings.txt +0 -2
- data/sunspot_solr/solr/solr/conf/stopwords.txt +0 -58
- data/sunspot_solr/solr/solr/conf/synonyms.txt +0 -31
- data/sunspot_solr/solr/solr/conf/xslt/example.xsl +0 -132
- data/sunspot_solr/solr/solr/conf/xslt/example_atom.xsl +0 -67
- data/sunspot_solr/solr/solr/conf/xslt/example_rss.xsl +0 -66
- data/sunspot_solr/solr/solr/conf/xslt/luke.xsl +0 -337
- data/sunspot_solr/solr/start.jar +0 -0
- data/sunspot_solr/solr/webapps/solr.war +0 -0
- data/sunspot_solr/spec/server_spec.rb +0 -98
- data/sunspot_solr/spec/spec_helper.rb +0 -18
- data/sunspot_solr/sunspot_solr.gemspec +0 -37
- data/tools/gem_tasks.rb +0 -69
@@ -1,136 +0,0 @@
|
|
1
|
-
require 'sunspot/batcher'
|
2
|
-
|
3
|
-
module Sunspot
|
4
|
-
#
|
5
|
-
# This class presents a service for adding, updating, and removing data
|
6
|
-
# from the Solr index. An Indexer instance is associated with a particular
|
7
|
-
# setup, and thus is capable of indexing instances of a certain class (and its
|
8
|
-
# subclasses).
|
9
|
-
#
|
10
|
-
class Indexer #:nodoc:
|
11
|
-
include RSolr::Char
|
12
|
-
|
13
|
-
def initialize(connection)
|
14
|
-
@connection = connection
|
15
|
-
end
|
16
|
-
|
17
|
-
#
|
18
|
-
# Construct a representation of the model for indexing and send it to the
|
19
|
-
# connection for indexing
|
20
|
-
#
|
21
|
-
# ==== Parameters
|
22
|
-
#
|
23
|
-
# model<Object>:: the model to index
|
24
|
-
#
|
25
|
-
def add(model)
|
26
|
-
documents = Util.Array(model).map { |m| prepare(m) }
|
27
|
-
if batcher.batching?
|
28
|
-
batcher.concat(documents)
|
29
|
-
else
|
30
|
-
add_documents(documents)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
#
|
35
|
-
# Remove the given model from the Solr index
|
36
|
-
#
|
37
|
-
def remove(*models)
|
38
|
-
@connection.delete_by_id(
|
39
|
-
models.map { |model| Adapters::InstanceAdapter.adapt(model).index_id }
|
40
|
-
)
|
41
|
-
end
|
42
|
-
|
43
|
-
#
|
44
|
-
# Remove the model from the Solr index by specifying the class and ID
|
45
|
-
#
|
46
|
-
def remove_by_id(class_name, *ids)
|
47
|
-
@connection.delete_by_id(
|
48
|
-
ids.map { |id| Adapters::InstanceAdapter.index_id_for(class_name, id) }
|
49
|
-
)
|
50
|
-
end
|
51
|
-
|
52
|
-
#
|
53
|
-
# Delete all documents of the class indexed by this indexer from Solr.
|
54
|
-
#
|
55
|
-
def remove_all(clazz = nil)
|
56
|
-
if clazz
|
57
|
-
@connection.delete_by_query("type:#{escape(clazz.name)}")
|
58
|
-
else
|
59
|
-
@connection.delete_by_query("*:*")
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
#
|
64
|
-
# Remove all documents that match the scope given in the Query
|
65
|
-
#
|
66
|
-
def remove_by_scope(scope)
|
67
|
-
@connection.delete_by_query(scope.to_boolean_phrase)
|
68
|
-
end
|
69
|
-
|
70
|
-
#
|
71
|
-
# Start batch processing
|
72
|
-
#
|
73
|
-
def start_batch
|
74
|
-
batcher.start_new
|
75
|
-
end
|
76
|
-
|
77
|
-
#
|
78
|
-
# Write batch out to Solr and clear it
|
79
|
-
#
|
80
|
-
def flush_batch
|
81
|
-
add_documents(batcher.end_current)
|
82
|
-
end
|
83
|
-
|
84
|
-
private
|
85
|
-
|
86
|
-
def batcher
|
87
|
-
@batcher ||= Batcher.new
|
88
|
-
end
|
89
|
-
|
90
|
-
#
|
91
|
-
# Convert documents into hash of indexed properties
|
92
|
-
#
|
93
|
-
def prepare(model)
|
94
|
-
document = document_for(model)
|
95
|
-
setup = setup_for(model)
|
96
|
-
if boost = setup.document_boost_for(model)
|
97
|
-
document.attrs[:boost] = boost
|
98
|
-
end
|
99
|
-
setup.all_field_factories.each do |field_factory|
|
100
|
-
field_factory.populate_document(document, model)
|
101
|
-
end
|
102
|
-
document
|
103
|
-
end
|
104
|
-
|
105
|
-
def add_documents(documents)
|
106
|
-
@connection.add(documents)
|
107
|
-
end
|
108
|
-
|
109
|
-
#
|
110
|
-
# All indexed documents index and store the +id+ and +type+ fields.
|
111
|
-
# This method constructs the document hash containing those key-value
|
112
|
-
# pairs.
|
113
|
-
#
|
114
|
-
def document_for(model)
|
115
|
-
RSolr::Xml::Document.new(
|
116
|
-
:id => Adapters::InstanceAdapter.adapt(model).index_id,
|
117
|
-
:type => Util.superclasses_for(model.class).map { |clazz| clazz.name }
|
118
|
-
)
|
119
|
-
end
|
120
|
-
|
121
|
-
#
|
122
|
-
# Get the Setup object for the given object's class.
|
123
|
-
#
|
124
|
-
# ==== Parameters
|
125
|
-
#
|
126
|
-
# object<Object>:: The object whose setup is to be retrieved
|
127
|
-
#
|
128
|
-
# ==== Returns
|
129
|
-
#
|
130
|
-
# Sunspot::Setup:: The setup for the object's class
|
131
|
-
#
|
132
|
-
def setup_for(object)
|
133
|
-
Setup.for(object.class) || raise(NoSetupError, "Sunspot is not configured for #{object.class.inspect}")
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
%w(filter abstract_field_facet connective boost_query date_field_facet range_facet dismax
|
2
|
-
field_facet highlighting pagination restriction common_query
|
3
|
-
standard_query more_like_this more_like_this_query geo geofilt bbox query_facet
|
4
|
-
scope sort sort_composite text_field_boost function_query
|
5
|
-
composite_fulltext field_group).each do |file|
|
6
|
-
require(File.join(File.dirname(__FILE__), 'query', file))
|
7
|
-
end
|
8
|
-
module Sunspot
|
9
|
-
module Query #:nodoc:all
|
10
|
-
end
|
11
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Query
|
3
|
-
class AbstractFieldFacet
|
4
|
-
include RSolr::Char
|
5
|
-
|
6
|
-
def initialize(field, options)
|
7
|
-
@field, @options = field, options
|
8
|
-
end
|
9
|
-
|
10
|
-
def to_params
|
11
|
-
params = {
|
12
|
-
:facet => 'true',
|
13
|
-
}
|
14
|
-
case @options[:sort]
|
15
|
-
when :count
|
16
|
-
params[qualified_param('sort')] = 'true'
|
17
|
-
when :index
|
18
|
-
params[qualified_param('sort')] = 'false'
|
19
|
-
when nil
|
20
|
-
else
|
21
|
-
raise(
|
22
|
-
ArgumentError,
|
23
|
-
"#{@options[:sort].inspect} is not an allowed value for :sort. Allowed options are :count and :index"
|
24
|
-
)
|
25
|
-
end
|
26
|
-
if @options[:limit]
|
27
|
-
params[qualified_param('limit')] = @options[:limit].to_i
|
28
|
-
end
|
29
|
-
if @options[:offset]
|
30
|
-
params[qualified_param('offset')] = @options[:offset].to_i
|
31
|
-
end
|
32
|
-
if @options[:prefix]
|
33
|
-
params[qualified_param('prefix')] = @options[:prefix].to_s
|
34
|
-
end
|
35
|
-
params[qualified_param('mincount')] =
|
36
|
-
case
|
37
|
-
when @options[:minimum_count] then @options[:minimum_count].to_i
|
38
|
-
when @options[:zeros] then 0
|
39
|
-
else 1
|
40
|
-
end
|
41
|
-
params
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def qualified_param(param)
|
47
|
-
:"f.#{key}.facet.#{param}"
|
48
|
-
end
|
49
|
-
|
50
|
-
def key
|
51
|
-
@key ||= @options[:name] || @field.indexed_name
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Query
|
3
|
-
class Bbox
|
4
|
-
def initialize(field, first_corner, second_corner)
|
5
|
-
@field, @first_corner, @second_corner = field, first_corner, second_corner
|
6
|
-
end
|
7
|
-
|
8
|
-
def to_params
|
9
|
-
filter = "#{@field.indexed_name}:[#{@first_corner.join(",")} TO #{@second_corner.join(",")}]"
|
10
|
-
|
11
|
-
{:fq => filter}
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Query
|
3
|
-
#
|
4
|
-
# Representation of a BoostQuery, which allows the searcher to specify a
|
5
|
-
# scope for which matching documents should have an extra boost. This is
|
6
|
-
# essentially a conjunction, with an extra instance variable containing
|
7
|
-
# the boost that should be applied.
|
8
|
-
#
|
9
|
-
class BoostQuery < Connective::Conjunction #:nodoc:
|
10
|
-
def initialize(boost)
|
11
|
-
super(false)
|
12
|
-
@boost = boost
|
13
|
-
end
|
14
|
-
|
15
|
-
def to_boolean_phrase
|
16
|
-
if @boost.is_a?(FunctionQuery)
|
17
|
-
"#{@boost}"
|
18
|
-
else
|
19
|
-
"#{super}^#{@boost}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Query #:nodoc:
|
3
|
-
class CommonQuery
|
4
|
-
def initialize(types)
|
5
|
-
@scope = Scope.new
|
6
|
-
@sort = SortComposite.new
|
7
|
-
@components = [@scope, @sort]
|
8
|
-
if types.length == 1
|
9
|
-
@scope.add_positive_restriction(TypeField.instance, Restriction::EqualTo, types.first)
|
10
|
-
else
|
11
|
-
@scope.add_positive_restriction(TypeField.instance, Restriction::AnyOf, types)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def solr_parameter_adjustment=(block)
|
16
|
-
@parameter_adjustment = block
|
17
|
-
end
|
18
|
-
|
19
|
-
def add_sort(sort)
|
20
|
-
@sort << sort
|
21
|
-
end
|
22
|
-
|
23
|
-
def add_group(group)
|
24
|
-
@components << group
|
25
|
-
group
|
26
|
-
end
|
27
|
-
|
28
|
-
def add_field_facet(facet)
|
29
|
-
@components << facet
|
30
|
-
facet
|
31
|
-
end
|
32
|
-
|
33
|
-
def add_query_facet(facet)
|
34
|
-
@components << facet
|
35
|
-
facet
|
36
|
-
end
|
37
|
-
|
38
|
-
def add_function(function)
|
39
|
-
@components << function
|
40
|
-
function
|
41
|
-
end
|
42
|
-
|
43
|
-
def add_geo(geo)
|
44
|
-
@components << geo
|
45
|
-
geo
|
46
|
-
end
|
47
|
-
|
48
|
-
def paginate(page, per_page, offset = nil)
|
49
|
-
if @pagination
|
50
|
-
@pagination.offset = offset
|
51
|
-
@pagination.page = page
|
52
|
-
@pagination.per_page = per_page
|
53
|
-
else
|
54
|
-
@components << @pagination = Pagination.new(page, per_page, offset)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def to_params
|
59
|
-
params = {}
|
60
|
-
@components.each do |component|
|
61
|
-
Sunspot::Util.deep_merge!(params, component.to_params)
|
62
|
-
end
|
63
|
-
@parameter_adjustment.call(params) if @parameter_adjustment
|
64
|
-
params[:q] ||= '*:*'
|
65
|
-
params
|
66
|
-
end
|
67
|
-
|
68
|
-
def [](key)
|
69
|
-
to_params[key.to_sym]
|
70
|
-
end
|
71
|
-
|
72
|
-
def page
|
73
|
-
@pagination.page if @pagination
|
74
|
-
end
|
75
|
-
|
76
|
-
def per_page
|
77
|
-
@pagination.per_page if @pagination
|
78
|
-
end
|
79
|
-
|
80
|
-
|
81
|
-
private
|
82
|
-
|
83
|
-
#
|
84
|
-
# If we have a single fulltext query, merge is normally. If there are
|
85
|
-
# multiple nested queries, serialize them as `_query_` subqueries.
|
86
|
-
#
|
87
|
-
def merge_fulltext(params)
|
88
|
-
return nil if @fulltexts.empty?
|
89
|
-
return Sunspot::Util.deep_merge!(params, @fulltexts.first.to_params) if @fulltexts.length == 1
|
90
|
-
subqueries = @fulltexts.map {|fulltext| fulltext.to_subquery }.join(' ')
|
91
|
-
Sunspot::Util.deep_merge!(params, {:q => subqueries})
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Query
|
3
|
-
class CompositeFulltext
|
4
|
-
def initialize
|
5
|
-
@components = []
|
6
|
-
end
|
7
|
-
|
8
|
-
def add(keywords)
|
9
|
-
@components << dismax = Dismax.new(keywords)
|
10
|
-
dismax
|
11
|
-
end
|
12
|
-
|
13
|
-
def add_location(field, lat, lng, options)
|
14
|
-
@components << location = Geo.new(field, lat, lng, options)
|
15
|
-
location
|
16
|
-
end
|
17
|
-
|
18
|
-
def to_params
|
19
|
-
case @components.length
|
20
|
-
when 0
|
21
|
-
{}
|
22
|
-
when 1
|
23
|
-
@components.first.to_params.merge(:fl => '* score')
|
24
|
-
else
|
25
|
-
to_subqueries.merge(:fl => '* score')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def to_subqueries
|
32
|
-
{ :q => @components.map { |dismax| dismax.to_subquery }.join(' ') }
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,206 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Query
|
3
|
-
module Connective #:nodoc:all
|
4
|
-
#
|
5
|
-
# Base class for connectives (conjunctions and disjunctions).
|
6
|
-
#
|
7
|
-
class Abstract
|
8
|
-
include Filter
|
9
|
-
|
10
|
-
def initialize(negated = false) #:nodoc:
|
11
|
-
@negated = negated
|
12
|
-
@components = []
|
13
|
-
end
|
14
|
-
|
15
|
-
#
|
16
|
-
# Add a restriction to the connective.
|
17
|
-
#
|
18
|
-
def add_restriction(negated, field, restriction_type, *value)
|
19
|
-
add_component(restriction_type.new(negated, field, *value))
|
20
|
-
end
|
21
|
-
|
22
|
-
#
|
23
|
-
# Add a shorthand restriction; the restriction type is determined by
|
24
|
-
# the value.
|
25
|
-
#
|
26
|
-
def add_shorthand_restriction(negated, field, value)
|
27
|
-
restriction_type =
|
28
|
-
case value
|
29
|
-
when Array then Restriction::AnyOf
|
30
|
-
when Range then Restriction::Between
|
31
|
-
else Restriction::EqualTo
|
32
|
-
end
|
33
|
-
add_restriction(negated, field, restriction_type, value)
|
34
|
-
end
|
35
|
-
|
36
|
-
#
|
37
|
-
# Add a positive restriction. The restriction will match all
|
38
|
-
# documents who match the terms fo the restriction.
|
39
|
-
#
|
40
|
-
def add_positive_restriction(field, restriction_type, value)
|
41
|
-
add_restriction(false, field, restriction_type, value)
|
42
|
-
end
|
43
|
-
|
44
|
-
#
|
45
|
-
# Add a positive shorthand restriction (see add_shorthand_restriction)
|
46
|
-
#
|
47
|
-
def add_positive_shorthand_restriction(field, value)
|
48
|
-
add_shorthand_restriction(false, field, value)
|
49
|
-
end
|
50
|
-
|
51
|
-
#
|
52
|
-
# Add a negated restriction. The added restriction will match all
|
53
|
-
# documents who do not match the terms of the restriction.
|
54
|
-
#
|
55
|
-
def add_negated_restriction(field, restriction_type, value)
|
56
|
-
add_restriction(true, field, restriction_type, value)
|
57
|
-
end
|
58
|
-
|
59
|
-
#
|
60
|
-
# Add a negated shorthand restriction (see add_shorthand_restriction)
|
61
|
-
#
|
62
|
-
def add_negated_shorthand_restriction(field, value)
|
63
|
-
add_shorthand_restriction(true, field, value)
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# Add a new conjunction and return it.
|
68
|
-
#
|
69
|
-
def add_conjunction
|
70
|
-
add_component(Conjunction.new)
|
71
|
-
end
|
72
|
-
|
73
|
-
#
|
74
|
-
# Add a new disjunction and return it.
|
75
|
-
#
|
76
|
-
def add_disjunction
|
77
|
-
add_component(Disjunction.new)
|
78
|
-
end
|
79
|
-
|
80
|
-
#
|
81
|
-
# Add an arbitrary component to the conjunction, and return it.
|
82
|
-
# The component must respond to #to_boolean_phrase
|
83
|
-
#
|
84
|
-
def add_component(component)
|
85
|
-
@components << component
|
86
|
-
component
|
87
|
-
end
|
88
|
-
|
89
|
-
#
|
90
|
-
# Express the connective as a Lucene boolean phrase.
|
91
|
-
#
|
92
|
-
def to_boolean_phrase #:nodoc:
|
93
|
-
unless @components.empty?
|
94
|
-
phrase =
|
95
|
-
if @components.length == 1
|
96
|
-
@components.first.to_boolean_phrase
|
97
|
-
else
|
98
|
-
component_phrases = @components.map do |component|
|
99
|
-
component.to_boolean_phrase
|
100
|
-
end
|
101
|
-
"(#{component_phrases.join(" #{connector} ")})"
|
102
|
-
end
|
103
|
-
if negated?
|
104
|
-
"-#{phrase}"
|
105
|
-
else
|
106
|
-
phrase
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
#
|
112
|
-
# Connectives can be negated during the process of denormalization that
|
113
|
-
# is performed when a disjunction contains a negated component. This
|
114
|
-
# method conforms to the duck type for all boolean query components.
|
115
|
-
#
|
116
|
-
def negated?
|
117
|
-
@negated
|
118
|
-
end
|
119
|
-
|
120
|
-
#
|
121
|
-
# Returns a new connective that's a negated version of this one.
|
122
|
-
#
|
123
|
-
def negate
|
124
|
-
negated = self.class.new(!negated?)
|
125
|
-
@components.each do |component|
|
126
|
-
negated.add_component(component)
|
127
|
-
end
|
128
|
-
negated
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
#
|
133
|
-
# Disjunctions combine their components with an OR operator.
|
134
|
-
#
|
135
|
-
class Disjunction < Abstract
|
136
|
-
class <<self
|
137
|
-
def inverse
|
138
|
-
Conjunction
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
#
|
143
|
-
# Express this disjunction as a Lucene boolean phrase
|
144
|
-
#
|
145
|
-
def to_boolean_phrase
|
146
|
-
if @components.any? { |component| component.negated? }
|
147
|
-
denormalize.to_boolean_phrase
|
148
|
-
else
|
149
|
-
super
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
#
|
154
|
-
# No-op - this is already a disjunction
|
155
|
-
#
|
156
|
-
def add_disjunction
|
157
|
-
self
|
158
|
-
end
|
159
|
-
|
160
|
-
private
|
161
|
-
|
162
|
-
def connector
|
163
|
-
'OR'
|
164
|
-
end
|
165
|
-
|
166
|
-
#
|
167
|
-
# If a disjunction contains negated components, it must be
|
168
|
-
# "denormalized", because the Lucene parser interprets any negated
|
169
|
-
# boolean phrase using AND semantics (this isn't a bug, it's just a
|
170
|
-
# subtlety of how Lucene parses queries). So, per DeMorgan's law we
|
171
|
-
# create a negated conjunction and add to it all of our components,
|
172
|
-
# negated themselves, which creates a query whose Lucene semantics are
|
173
|
-
# in line with our intentions.
|
174
|
-
#
|
175
|
-
def denormalize
|
176
|
-
denormalized = self.class.inverse.new(!negated?)
|
177
|
-
@components.each do |component|
|
178
|
-
denormalized.add_component(component.negate)
|
179
|
-
end
|
180
|
-
denormalized
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
#
|
185
|
-
# Conjunctions combine their components with an AND operator.
|
186
|
-
#
|
187
|
-
class Conjunction < Abstract
|
188
|
-
class <<self
|
189
|
-
def inverse
|
190
|
-
Disjunction
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
def add_conjunction
|
195
|
-
self
|
196
|
-
end
|
197
|
-
|
198
|
-
private
|
199
|
-
|
200
|
-
def connector
|
201
|
-
'AND'
|
202
|
-
end
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|