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,35 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Search
|
3
|
-
class DateFacet
|
4
|
-
def initialize(field, search, options)
|
5
|
-
@field, @search, @options = field, search, options
|
6
|
-
end
|
7
|
-
|
8
|
-
def field_name
|
9
|
-
@field.name
|
10
|
-
end
|
11
|
-
|
12
|
-
def rows
|
13
|
-
@rows ||=
|
14
|
-
begin
|
15
|
-
data = @search.facet_response['facet_dates'][@field.indexed_name]
|
16
|
-
gap = (@options[:time_interval] || 86400).to_i
|
17
|
-
rows = []
|
18
|
-
data.each_pair do |value, count|
|
19
|
-
if value =~ /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/
|
20
|
-
start_time = @field.cast(value)
|
21
|
-
end_time = start_time + gap
|
22
|
-
rows << FacetRow.new(start_time..end_time, count, self)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
if @options[:sort] == :count
|
26
|
-
rows.sort! { |lrow, rrow| rrow.count <=> lrow.count }
|
27
|
-
else
|
28
|
-
rows.sort! { |lrow, rrow| lrow.value.first <=> rrow.value.first }
|
29
|
-
end
|
30
|
-
rows
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Search
|
3
|
-
class FacetRow
|
4
|
-
attr_reader :value, :count
|
5
|
-
attr_writer :instance #:nodoc:
|
6
|
-
|
7
|
-
def initialize(value, count, facet) #:nodoc:
|
8
|
-
@value, @count, @facet = value, count, facet
|
9
|
-
end
|
10
|
-
|
11
|
-
#
|
12
|
-
# Return the instance referenced by this facet row. Only valid for field
|
13
|
-
# facets whose fields are defined with the :references key.
|
14
|
-
#
|
15
|
-
def instance
|
16
|
-
if !defined?(@instance)
|
17
|
-
@facet.populate_instances
|
18
|
-
end
|
19
|
-
@instance
|
20
|
-
end
|
21
|
-
|
22
|
-
def inspect
|
23
|
-
"<Sunspot::Search::FacetRow:#{value.inspect} (#{count})>"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Search
|
3
|
-
#
|
4
|
-
# A FieldFacet is a facet whose rows are all values for a certain field, in
|
5
|
-
# contrast to a QueryFacet, whose rows represent arbitrary queries.
|
6
|
-
#
|
7
|
-
class FieldFacet < QueryFacet
|
8
|
-
def initialize(field, search, options) #:nodoc:
|
9
|
-
super((options[:name] || field.name).to_sym, search, options)
|
10
|
-
@field = field
|
11
|
-
end
|
12
|
-
|
13
|
-
def field_name
|
14
|
-
@field.name
|
15
|
-
end
|
16
|
-
|
17
|
-
#
|
18
|
-
# Get the rows returned for this facet.
|
19
|
-
#
|
20
|
-
# ==== Options (options)
|
21
|
-
#
|
22
|
-
# :verify::
|
23
|
-
# Only return rows for which the referenced object exists in the data
|
24
|
-
# store. This option is ignored unless the field associated with this
|
25
|
-
# facet is configured with a :references argument.
|
26
|
-
#
|
27
|
-
# ==== Returns
|
28
|
-
#
|
29
|
-
# Array:: Array of FacetRow objects
|
30
|
-
#
|
31
|
-
def rows(options = {})
|
32
|
-
if options[:verify]
|
33
|
-
verified_rows
|
34
|
-
else
|
35
|
-
@rows ||=
|
36
|
-
begin
|
37
|
-
rows = super
|
38
|
-
has_query_facets = !rows.empty?
|
39
|
-
if @search.facet_response['facet_fields']
|
40
|
-
if data = @search.facet_response['facet_fields'][key]
|
41
|
-
data.each_slice(2) do |value, count|
|
42
|
-
row = FacetRow.new(@field.cast(value), count, self)
|
43
|
-
rows << row
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
sort_rows!(rows) if has_query_facets
|
48
|
-
rows
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
#
|
54
|
-
# If this facet references a model class, populate the rows with instances
|
55
|
-
# of the model class by loading them out of the appropriate adapter.
|
56
|
-
#
|
57
|
-
def populate_instances #:nodoc:
|
58
|
-
if reference = @field.reference
|
59
|
-
values_hash = rows.inject({}) do |hash, row|
|
60
|
-
hash[row.value] = row
|
61
|
-
hash
|
62
|
-
end
|
63
|
-
instances = Adapters::DataAccessor.create(Sunspot::Util.full_const_get(reference)).load_all(
|
64
|
-
values_hash.keys
|
65
|
-
)
|
66
|
-
instances.each do |instance|
|
67
|
-
values_hash[Adapters::InstanceAdapter.adapt(instance).id].instance = instance
|
68
|
-
end
|
69
|
-
true
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
private
|
74
|
-
|
75
|
-
def verified_rows
|
76
|
-
if @field.reference
|
77
|
-
@verified_rows ||= rows.select { |row| row.instance }
|
78
|
-
else
|
79
|
-
rows
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def key
|
84
|
-
@key ||= (@options[:name] || @field.indexed_name).to_s
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'sunspot/search/paginated_collection'
|
2
|
-
|
3
|
-
module Sunspot
|
4
|
-
module Search
|
5
|
-
class FieldGroup
|
6
|
-
def initialize(field, search) #:nodoc:
|
7
|
-
@field, @search = field, search
|
8
|
-
end
|
9
|
-
|
10
|
-
def groups
|
11
|
-
@groups ||=
|
12
|
-
if solr_response
|
13
|
-
paginate_collection(
|
14
|
-
solr_response['groups'].map do |group|
|
15
|
-
Group.new(group['groupValue'], group['doclist'], @search)
|
16
|
-
end
|
17
|
-
)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def matches
|
22
|
-
if solr_response
|
23
|
-
solr_response['matches'].to_i
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def total
|
28
|
-
if solr_response
|
29
|
-
solr_response['ngroups'].to_i
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
#
|
34
|
-
# It populates all grouped hits at once.
|
35
|
-
# Useful for eager loading fall grouped results at once.
|
36
|
-
#
|
37
|
-
def populate_all_hits
|
38
|
-
# Init a 2 dimension Hash that contains an array per key
|
39
|
-
id_hit_hash = Hash.new { |hash, key| hash[key] = Hash.new{ |h, k| h[k] = [] } }
|
40
|
-
groups.each do |g|
|
41
|
-
# Take all hits to being populated later on
|
42
|
-
g.hits.each do |hit|
|
43
|
-
id_hit_hash[hit.class_name][hit.primary_key] |= [hit]
|
44
|
-
end
|
45
|
-
end
|
46
|
-
# Go for each class and load the results' objects into each of the hits
|
47
|
-
id_hit_hash.each_pair do |class_name, many_hits|
|
48
|
-
ids = many_hits.keys
|
49
|
-
data_accessor = @search.data_accessor_for(Util.full_const_get(class_name))
|
50
|
-
hits_for_class = id_hit_hash[class_name]
|
51
|
-
data_accessor.load_all(ids).each do |result|
|
52
|
-
hits = hits_for_class.delete(Adapters::InstanceAdapter.adapt(result).id.to_s)
|
53
|
-
hits.each{ |hit| hit.result = result }
|
54
|
-
end
|
55
|
-
hits_for_class.values.each { |hits| hits.each{|hit| hit.result = nil } }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
def solr_response
|
62
|
-
@search.group_response[@field.indexed_name.to_s]
|
63
|
-
end
|
64
|
-
|
65
|
-
def paginate_collection(collection)
|
66
|
-
PaginatedCollection.new(collection, @search.query.page, @search.query.per_page, total)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'sunspot/search/hit_enumerable'
|
2
|
-
|
3
|
-
module Sunspot
|
4
|
-
module Search
|
5
|
-
class Group
|
6
|
-
attr_reader :value
|
7
|
-
|
8
|
-
include HitEnumerable
|
9
|
-
|
10
|
-
def initialize(value, doclist, search)
|
11
|
-
@value, @doclist, @search = value, doclist, search
|
12
|
-
end
|
13
|
-
|
14
|
-
def hits(options = {})
|
15
|
-
if options[:verify]
|
16
|
-
super
|
17
|
-
else
|
18
|
-
@hits ||= super
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def verified_hits
|
23
|
-
@verified_hits ||= super
|
24
|
-
end
|
25
|
-
|
26
|
-
def results
|
27
|
-
@results ||= verified_hits.map { |hit| hit.instance }
|
28
|
-
end
|
29
|
-
|
30
|
-
def highlights_for(doc)
|
31
|
-
@search.highlights_for(doc)
|
32
|
-
end
|
33
|
-
|
34
|
-
def solr_docs
|
35
|
-
@doclist['docs']
|
36
|
-
end
|
37
|
-
|
38
|
-
def data_accessor_for(clazz)
|
39
|
-
@search.data_accessor_for(clazz)
|
40
|
-
end
|
41
|
-
|
42
|
-
#
|
43
|
-
# The total number of documents matching the query for this group
|
44
|
-
#
|
45
|
-
# ==== Returns
|
46
|
-
#
|
47
|
-
# Integer:: Total matching documents
|
48
|
-
#
|
49
|
-
def total
|
50
|
-
@doclist['numFound']
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Search
|
3
|
-
#
|
4
|
-
# A Highlight represents a single highlighted fragment of text from a
|
5
|
-
# document. Depending on the highlighting parameters used for search, there
|
6
|
-
# may be more than one Highlight object for a given field in a given result.
|
7
|
-
#
|
8
|
-
class Highlight
|
9
|
-
HIGHLIGHT_MATCHER = /@@@hl@@@(.*?)@@@endhl@@@/ #:nodoc:
|
10
|
-
|
11
|
-
#
|
12
|
-
# The name of the field in which the highlight appeared.
|
13
|
-
#
|
14
|
-
attr_reader :field_name
|
15
|
-
|
16
|
-
def initialize(field_name, highlight) #:nodoc:
|
17
|
-
@field_name = field_name.to_sym
|
18
|
-
@highlight = highlight.to_s.strip
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
# Returns the highlighted text with formatting according to the template given in &block.
|
23
|
-
# When no block is given, <em> and </em> are used to surround the highlight.
|
24
|
-
#
|
25
|
-
# ==== Example
|
26
|
-
#
|
27
|
-
# search.highlights(:body).first.format { |word| "<strong>#{word}</strong>" }
|
28
|
-
#
|
29
|
-
def format(&block)
|
30
|
-
block ||= proc { |word| "<em>#{word}</em>" }
|
31
|
-
@highlight.gsub(HIGHLIGHT_MATCHER) do
|
32
|
-
block.call(Regexp.last_match[1])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
alias_method :formatted, :format
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,150 +0,0 @@
|
|
1
|
-
module Sunspot
|
2
|
-
module Search
|
3
|
-
#
|
4
|
-
# Hit objects represent the raw information returned by Solr for a single
|
5
|
-
# document. As well as the primary key and class name, hit objects give
|
6
|
-
# access to stored field values, keyword relevance score, and keyword
|
7
|
-
# highlighting.
|
8
|
-
#
|
9
|
-
class Hit
|
10
|
-
SPECIAL_KEYS = Set.new(%w(id type score)) #:nodoc:
|
11
|
-
|
12
|
-
#
|
13
|
-
# Primary key of object associated with this hit, as string.
|
14
|
-
#
|
15
|
-
attr_reader :primary_key
|
16
|
-
#
|
17
|
-
# Class name of object associated with this hit, as string.
|
18
|
-
#
|
19
|
-
attr_reader :class_name
|
20
|
-
#
|
21
|
-
# Keyword relevance score associated with this result. Nil if this hit
|
22
|
-
# is not from a keyword search.
|
23
|
-
#
|
24
|
-
attr_reader :score
|
25
|
-
#
|
26
|
-
|
27
|
-
attr_writer :result #:nodoc:
|
28
|
-
|
29
|
-
def initialize(raw_hit, highlights, search) #:nodoc:
|
30
|
-
@class_name, @primary_key = *raw_hit['id'].match(/([^ ]+) (.+)/)[1..2]
|
31
|
-
@score = raw_hit['score']
|
32
|
-
@search = search
|
33
|
-
@stored_values = raw_hit
|
34
|
-
@stored_cache = {}
|
35
|
-
@highlights = highlights
|
36
|
-
end
|
37
|
-
|
38
|
-
#
|
39
|
-
# Returns all highlights for this hit when called without parameters.
|
40
|
-
# When a field_name is provided, returns only the highlight for this field.
|
41
|
-
#
|
42
|
-
def highlights(field_name = nil)
|
43
|
-
if field_name.nil?
|
44
|
-
highlights_cache.values.flatten
|
45
|
-
else
|
46
|
-
highlights_cache[field_name.to_sym]
|
47
|
-
end || []
|
48
|
-
end
|
49
|
-
|
50
|
-
#
|
51
|
-
# Return the first highlight found for a given field, or nil if there is
|
52
|
-
# none.
|
53
|
-
#
|
54
|
-
def highlight(field_name)
|
55
|
-
highlights(field_name).first
|
56
|
-
end
|
57
|
-
|
58
|
-
#
|
59
|
-
# Retrieve stored field value. For any attribute field configured with
|
60
|
-
# :stored => true, the Hit object will contain the stored value for
|
61
|
-
# that field. The value of this field will be typecast according to the
|
62
|
-
# type of the field.
|
63
|
-
#
|
64
|
-
# ==== Parameters
|
65
|
-
#
|
66
|
-
# field_name<Symbol>::
|
67
|
-
# The name of the field for which to retrieve the stored value.
|
68
|
-
# dynamic_field_name<Symbol>::
|
69
|
-
# If you want to access a stored dynamic field, this should be the
|
70
|
-
# dynamic component of the field name.
|
71
|
-
#
|
72
|
-
def stored(field_name, dynamic_field_name = nil)
|
73
|
-
field_key =
|
74
|
-
if dynamic_field_name
|
75
|
-
[field_name.to_sym, dynamic_field_name.to_sym]
|
76
|
-
else
|
77
|
-
field_name.to_sym
|
78
|
-
end
|
79
|
-
return @stored_cache[field_key] if @stored_cache.has_key?(field_key)
|
80
|
-
@stored_cache[field_key] = stored_value(field_name, dynamic_field_name)
|
81
|
-
end
|
82
|
-
|
83
|
-
#
|
84
|
-
# Retrieve the instance associated with this hit. This is lazy-loaded, but
|
85
|
-
# the first time it is called on any hit, all the hits for the search will
|
86
|
-
# load their instances using the adapter's #load_all method.
|
87
|
-
#
|
88
|
-
def result
|
89
|
-
return @result if defined?(@result)
|
90
|
-
@search.populate_hits
|
91
|
-
@result
|
92
|
-
end
|
93
|
-
alias_method :instance, :result
|
94
|
-
|
95
|
-
def inspect #:nodoc:
|
96
|
-
"#<Sunspot::Search::Hit:#{@class_name} #{@primary_key}>"
|
97
|
-
end
|
98
|
-
|
99
|
-
#
|
100
|
-
# Returns the instance primary key when the Hit is used to generate urls
|
101
|
-
# For example, using a search that stores the :name attribute:
|
102
|
-
#
|
103
|
-
# hits = Sunspot.search(Object) do ...
|
104
|
-
#
|
105
|
-
# hits.each do |hit|
|
106
|
-
# link_to hit.stored(:name), edit_object_path(hit)
|
107
|
-
# end
|
108
|
-
#
|
109
|
-
def to_param
|
110
|
-
self.primary_key
|
111
|
-
end
|
112
|
-
|
113
|
-
private
|
114
|
-
|
115
|
-
def setup
|
116
|
-
@setup ||= Sunspot::Setup.for(Util.full_const_get(@class_name))
|
117
|
-
end
|
118
|
-
|
119
|
-
def highlights_cache
|
120
|
-
@highlights_cache ||=
|
121
|
-
begin
|
122
|
-
cache = {}
|
123
|
-
if @highlights
|
124
|
-
@highlights.each_pair do |indexed_field_name, highlight_strings|
|
125
|
-
field_name = indexed_field_name.sub(/_[a-z]+$/, '').to_sym
|
126
|
-
cache[field_name] = highlight_strings.map do |highlight_string|
|
127
|
-
Highlight.new(field_name, highlight_string)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
cache
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def stored_value(field_name, dynamic_field_name)
|
136
|
-
setup.stored_fields(field_name, dynamic_field_name).each do |field|
|
137
|
-
value = @stored_values[field.indexed_name]
|
138
|
-
|
139
|
-
if Array === value
|
140
|
-
return value.map { |item| field.cast(item) }
|
141
|
-
elsif !value.nil?
|
142
|
-
return field.cast(value)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
nil
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|