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,275 +0,0 @@
|
|
1
|
-
shared_examples_for "scoped query" do
|
2
|
-
it 'scopes by exact match with a string' do
|
3
|
-
search do
|
4
|
-
with :title, 'My Pet Post'
|
5
|
-
end
|
6
|
-
connection.should have_last_search_including(:fq, 'title_ss:My\ Pet\ Post')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'scopes by exact match with a special string' do
|
10
|
-
search do
|
11
|
-
with :title, 'OR'
|
12
|
-
end
|
13
|
-
connection.should have_last_search_including(:fq, 'title_ss:"OR"')
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'scopes by exact match with time' do
|
17
|
-
time = Time.parse('1983-07-08 05:00:00 -0400')
|
18
|
-
search do
|
19
|
-
with :published_at, time
|
20
|
-
end
|
21
|
-
connection.should have_last_search_including(
|
22
|
-
:fq,
|
23
|
-
'published_at_dt:1983\-07\-08T09\:00\:00Z'
|
24
|
-
)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'scopes by exact match with date' do
|
28
|
-
date = Date.new(1983, 7, 8)
|
29
|
-
search do
|
30
|
-
with :expire_date, date
|
31
|
-
end
|
32
|
-
connection.should have_last_search_including(
|
33
|
-
:fq,
|
34
|
-
'expire_date_d:1983\-07\-08T00\:00\:00Z'
|
35
|
-
)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'scopes by exact match with boolean' do
|
39
|
-
search do
|
40
|
-
with :featured, false
|
41
|
-
end
|
42
|
-
connection.should have_last_search_including(:fq, 'featured_bs:false')
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'scopes by less than match with float' do
|
46
|
-
search do
|
47
|
-
with(:average_rating).less_than 3.0
|
48
|
-
end
|
49
|
-
connection.should have_last_search_including(:fq, 'average_rating_ft:{* TO 3\.0}')
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should quote string with space in a less than match' do
|
53
|
-
search do
|
54
|
-
with(:title).less_than('test value')
|
55
|
-
end
|
56
|
-
connection.should have_last_search_including(:fq, 'title_ss:{* TO "test\ value"}')
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'scopes by greater than match with float' do
|
60
|
-
search do
|
61
|
-
with(:average_rating).greater_than 3.0
|
62
|
-
end
|
63
|
-
connection.should have_last_search_including(:fq, 'average_rating_ft:{3\.0 TO *}')
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'scopes by short-form between match with integers' do
|
67
|
-
search do
|
68
|
-
with :blog_id, 2..4
|
69
|
-
end
|
70
|
-
connection.should have_last_search_including(:fq, 'blog_id_i:[2 TO 4]')
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'scopes by between match with float' do
|
74
|
-
search do
|
75
|
-
with(:average_rating).between 2.0..4.0
|
76
|
-
end
|
77
|
-
connection.should have_last_search_including(:fq, 'average_rating_ft:[2\.0 TO 4\.0]')
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'scopes by any match with integer' do
|
81
|
-
search do
|
82
|
-
with(:category_ids).any_of [2, 7, 12]
|
83
|
-
end
|
84
|
-
connection.should have_last_search_including(:fq, 'category_ids_im:(2 OR 7 OR 12)')
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'scopes by short-form any-of match with integers' do
|
88
|
-
search do
|
89
|
-
with :category_ids, [2, 7, 12]
|
90
|
-
end
|
91
|
-
connection.should have_last_search_including(:fq, 'category_ids_im:(2 OR 7 OR 12)')
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'scopes by all match with integer' do
|
95
|
-
search do
|
96
|
-
with(:category_ids).all_of [2, 7, 12]
|
97
|
-
end
|
98
|
-
connection.should have_last_search_including(:fq, 'category_ids_im:(2 AND 7 AND 12)')
|
99
|
-
end
|
100
|
-
|
101
|
-
it 'scopes by prefix match with string' do
|
102
|
-
search do
|
103
|
-
with(:title).starting_with('tes')
|
104
|
-
end
|
105
|
-
connection.should have_last_search_including(:fq, 'title_ss:tes*')
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'scopes by not equal match with string' do
|
109
|
-
search do
|
110
|
-
without :title, 'Bad Post'
|
111
|
-
end
|
112
|
-
connection.should have_last_search_including(:fq, '-title_ss:Bad\ Post')
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'scopes by not less than match with float' do
|
116
|
-
search do
|
117
|
-
without(:average_rating).less_than 3.0
|
118
|
-
end
|
119
|
-
connection.should have_last_search_including(:fq, '-average_rating_ft:{* TO 3\.0}')
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'scopes by not greater than match with float' do
|
123
|
-
search do
|
124
|
-
without(:average_rating).greater_than 3.0
|
125
|
-
end
|
126
|
-
connection.should have_last_search_including(:fq, '-average_rating_ft:{3\.0 TO *}')
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'scopes by not between match with shorthand' do
|
130
|
-
search do
|
131
|
-
without(:blog_id, 2..4)
|
132
|
-
end
|
133
|
-
connection.should have_last_search_including(:fq, '-blog_id_i:[2 TO 4]')
|
134
|
-
end
|
135
|
-
|
136
|
-
it 'scopes by not between match with float' do
|
137
|
-
search do
|
138
|
-
without(:average_rating).between 2.0..4.0
|
139
|
-
end
|
140
|
-
connection.should have_last_search_including(:fq, '-average_rating_ft:[2\.0 TO 4\.0]')
|
141
|
-
end
|
142
|
-
|
143
|
-
it 'scopes by not any match with integer' do
|
144
|
-
search do
|
145
|
-
without(:category_ids).any_of [2, 7, 12]
|
146
|
-
end
|
147
|
-
connection.should have_last_search_including(:fq, '-category_ids_im:(2 OR 7 OR 12)')
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'scopes by not all match with integer' do
|
151
|
-
search do
|
152
|
-
without(:category_ids).all_of [2, 7, 12]
|
153
|
-
end
|
154
|
-
connection.should have_last_search_including(:fq, '-category_ids_im:(2 AND 7 AND 12)')
|
155
|
-
end
|
156
|
-
|
157
|
-
it 'scopes by empty field' do
|
158
|
-
search do
|
159
|
-
with :average_rating, nil
|
160
|
-
end
|
161
|
-
connection.should have_last_search_including(:fq, '-average_rating_ft:[* TO *]')
|
162
|
-
end
|
163
|
-
|
164
|
-
it 'scopes by non-empty field' do
|
165
|
-
search do
|
166
|
-
without :average_rating, nil
|
167
|
-
end
|
168
|
-
connection.should have_last_search_including(:fq, 'average_rating_ft:[* TO *]')
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'includes by object identity' do
|
172
|
-
post = Post.new
|
173
|
-
search do
|
174
|
-
with post
|
175
|
-
end
|
176
|
-
connection.should have_last_search_including(:fq, "id:(Post\\ #{post.id})")
|
177
|
-
end
|
178
|
-
|
179
|
-
it 'includes multiple objects passed as varargs by object identity' do
|
180
|
-
post1, post2 = Post.new, Post.new
|
181
|
-
search do
|
182
|
-
with post1, post2
|
183
|
-
end
|
184
|
-
connection.should have_last_search_including(
|
185
|
-
:fq, "id:(Post\\ #{post1.id} OR Post\\ #{post2.id})"
|
186
|
-
)
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'includes multiple objects passed as array by object identity' do
|
190
|
-
posts = [Post.new, Post.new]
|
191
|
-
search do
|
192
|
-
with posts
|
193
|
-
end
|
194
|
-
connection.should have_last_search_including(
|
195
|
-
:fq, "id:(Post\\ #{posts.first.id} OR Post\\ #{posts.last.id})"
|
196
|
-
)
|
197
|
-
end
|
198
|
-
|
199
|
-
it 'excludes by object identity' do
|
200
|
-
post = Post.new
|
201
|
-
search do
|
202
|
-
without post
|
203
|
-
end
|
204
|
-
connection.should have_last_search_including(:fq, "-id:(Post\\ #{post.id})")
|
205
|
-
end
|
206
|
-
|
207
|
-
it 'excludes multiple objects passed as varargs by object identity' do
|
208
|
-
post1, post2 = Post.new, Post.new
|
209
|
-
search do
|
210
|
-
without post1, post2
|
211
|
-
end
|
212
|
-
connection.should have_last_search_including(
|
213
|
-
:fq,
|
214
|
-
"-id:(Post\\ #{post1.id} OR Post\\ #{post2.id})"
|
215
|
-
)
|
216
|
-
end
|
217
|
-
|
218
|
-
it 'excludes multiple objects passed as array by object identity' do
|
219
|
-
posts = [Post.new, Post.new]
|
220
|
-
search do
|
221
|
-
without posts
|
222
|
-
end
|
223
|
-
connection.should have_last_search_including(
|
224
|
-
:fq,
|
225
|
-
"-id:(Post\\ #{posts.first.id} OR Post\\ #{posts.last.id})"
|
226
|
-
)
|
227
|
-
end
|
228
|
-
|
229
|
-
it 'allows scoping on fields common to all types' do
|
230
|
-
time = Time.parse('1983-07-08 05:00:00 -0400')
|
231
|
-
search Post, Namespaced::Comment do
|
232
|
-
with :published_at, time
|
233
|
-
end
|
234
|
-
connection.should have_last_search_including(:fq, 'published_at_dt:1983\-07\-08T09\:00\:00Z')
|
235
|
-
end
|
236
|
-
|
237
|
-
it 'allows scoping on field not common to all types' do
|
238
|
-
search Post, Namespaced::Comment do
|
239
|
-
with :blog_id, 1
|
240
|
-
end
|
241
|
-
connection.should have_last_search_including(:fq, 'blog_id_i:1')
|
242
|
-
end
|
243
|
-
|
244
|
-
it 'raises Sunspot::UnrecognizedFieldError if search scoped to field configured differently between types' do
|
245
|
-
lambda do
|
246
|
-
search Post, Namespaced::Comment do
|
247
|
-
with :average_rating, 2.2 # this is a float in Post but an integer in Comment
|
248
|
-
end
|
249
|
-
end.should raise_error(Sunspot::UnrecognizedFieldError)
|
250
|
-
end
|
251
|
-
|
252
|
-
it 'raises Sunspot::UnrecognizedFieldError for nonexistant fields in block scope' do
|
253
|
-
lambda do
|
254
|
-
search do
|
255
|
-
with :bogus, 'Field'
|
256
|
-
end
|
257
|
-
end.should raise_error(Sunspot::UnrecognizedFieldError)
|
258
|
-
end
|
259
|
-
|
260
|
-
it 'raises NoMethodError if bogus operator referenced' do
|
261
|
-
lambda do
|
262
|
-
search do
|
263
|
-
with(:category_ids).resembling :bogus_condition
|
264
|
-
end
|
265
|
-
end.should raise_error(NoMethodError)
|
266
|
-
end
|
267
|
-
|
268
|
-
it 'should raise ArgumentError if more than two arguments passed to scope method' do
|
269
|
-
lambda do
|
270
|
-
search do
|
271
|
-
with(:category_ids, 4, 5)
|
272
|
-
end
|
273
|
-
end.should raise_error(ArgumentError)
|
274
|
-
end
|
275
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'bigdecimal'
|
2
|
-
|
3
|
-
shared_examples_for "spatial query" do
|
4
|
-
it 'filters by radius' do
|
5
|
-
search do
|
6
|
-
with(:coordinates_new).in_radius(23, -46, 100)
|
7
|
-
end
|
8
|
-
|
9
|
-
connection.should have_last_search_including(:fq, "{!geofilt sfield=coordinates_new_ll pt=23,-46 d=100}")
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'filters by radius via bbox (inexact)' do
|
13
|
-
search do
|
14
|
-
with(:coordinates_new).in_radius(23, -46, 100, :bbox => true)
|
15
|
-
end
|
16
|
-
|
17
|
-
connection.should have_last_search_including(:fq, "{!bbox sfield=coordinates_new_ll pt=23,-46 d=100}")
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'filters by bounding box' do
|
21
|
-
search do
|
22
|
-
with(:coordinates_new).in_bounding_box([45, -94], [46, -93])
|
23
|
-
end
|
24
|
-
|
25
|
-
connection.should have_last_search_including(:fq, "coordinates_new_ll:[45,-94 TO 46,-93]")
|
26
|
-
end
|
27
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require File.expand_path('spec_helper', File.join(File.dirname(__FILE__), '..'))
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path('spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe 'standard query', :type => :query do
|
4
|
-
it_should_behave_like "scoped query"
|
5
|
-
it_should_behave_like "query with advanced manipulation"
|
6
|
-
it_should_behave_like "query with connective scope"
|
7
|
-
it_should_behave_like "query with dynamic field support"
|
8
|
-
it_should_behave_like "facetable query"
|
9
|
-
it_should_behave_like "fulltext query"
|
10
|
-
it_should_behave_like "query with highlighting support"
|
11
|
-
it_should_behave_like "sortable query"
|
12
|
-
it_should_behave_like "query with text field scoping"
|
13
|
-
it_should_behave_like "geohash query"
|
14
|
-
it_should_behave_like "spatial query"
|
15
|
-
|
16
|
-
it 'adds a no-op query to :q parameter when no :q provided' do
|
17
|
-
session.search Post do
|
18
|
-
with :title, 'My Pet Post'
|
19
|
-
end
|
20
|
-
connection.should have_last_search_with(:q => '*:*')
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def search(*classes, &block)
|
26
|
-
classes[0] ||= Post
|
27
|
-
session.search(*classes, &block)
|
28
|
-
end
|
29
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
shared_examples_for 'query with text field scoping' do
|
2
|
-
it 'should scope with a text field' do
|
3
|
-
search do
|
4
|
-
text_fields do
|
5
|
-
with(:body, 'test')
|
6
|
-
end
|
7
|
-
end
|
8
|
-
connection.should have_last_search_including(:fq, 'body_textsv:test')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'should raise an UnrecognizedFieldError if differently configured text field is used' do
|
12
|
-
lambda do
|
13
|
-
search(Post, Namespaced::Comment) do
|
14
|
-
text_fields do
|
15
|
-
with(:body, 'test')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end.should raise_error(Sunspot::UnrecognizedFieldError)
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should raise an UnrecognizedFieldError if no field exists' do
|
22
|
-
lambda do
|
23
|
-
search do
|
24
|
-
text_fields do
|
25
|
-
with(:bogus, 'test')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end.should raise_error(Sunspot::UnrecognizedFieldError)
|
29
|
-
end
|
30
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
describe 'typed query' do
|
2
|
-
it 'properly escapes namespaced type names' do
|
3
|
-
session.search(Namespaced::Comment)
|
4
|
-
connection.should have_last_search_with(:fq => ['type:Namespaced\:\:Comment'])
|
5
|
-
end
|
6
|
-
|
7
|
-
it 'builds search for multiple types' do
|
8
|
-
session.search(Post, Namespaced::Comment)
|
9
|
-
connection.should have_last_search_with(:fq => ['type:(Post OR Namespaced\:\:Comment)'])
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'searches type of subclass when superclass is configured' do
|
13
|
-
session.search PhotoPost
|
14
|
-
connection.should have_last_search_with(:fq => ['type:PhotoPost'])
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'raises an ArgumentError if no types given to search' do
|
18
|
-
lambda { session.search }.should raise_error(ArgumentError)
|
19
|
-
end
|
20
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require File.expand_path('spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe 'search with dynamic fields' do
|
4
|
-
it 'returns dynamic string facet' do
|
5
|
-
stub_facet(:"custom_string:test_ss", 'two' => 2, 'one' => 1)
|
6
|
-
result = session.search(Post) { dynamic(:custom_string) { facet(:test) }}
|
7
|
-
result.facet(:custom_string, :test).rows.map { |row| row.value }.should == ['two', 'one']
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'returns dynamic field facet with custom label' do
|
11
|
-
stub_facet(:"bogus", 'two' => 2, 'one' => 1)
|
12
|
-
result = session.search(Post) { dynamic(:custom_string) { facet(:test, :name => :bogus) }}
|
13
|
-
result.facet(:bogus).rows.map { |row| row.value }.should == ['two', 'one']
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'returns query facet specified in dynamic call' do
|
17
|
-
stub_query_facet(
|
18
|
-
'custom_string\:test_ss:(foo OR bar)' => 3
|
19
|
-
)
|
20
|
-
search = session.search(Post) do
|
21
|
-
dynamic :custom_string do
|
22
|
-
facet :test do
|
23
|
-
row :foo_bar do
|
24
|
-
with :test, %w(foo bar)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
facet = search.facet(:test)
|
30
|
-
facet.rows.first.value.should == :foo_bar
|
31
|
-
facet.rows.first.count.should == 3
|
32
|
-
end
|
33
|
-
end
|
@@ -1,360 +0,0 @@
|
|
1
|
-
require File.expand_path('spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe 'faceting', :type => :search do
|
4
|
-
it 'returns field name for facet' do
|
5
|
-
stub_facet(:title_ss, {})
|
6
|
-
result = session.search Post do
|
7
|
-
facet :title
|
8
|
-
end
|
9
|
-
result.facet(:title).field_name.should == :title
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'returns facet specified by string' do
|
13
|
-
stub_facet(:title_ss, {})
|
14
|
-
result = session.search Post do
|
15
|
-
facet :title
|
16
|
-
end
|
17
|
-
result.facet('title').field_name.should == :title
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns all facets specified by search' do
|
21
|
-
stub_facet(:title_ss, { 'Author 1' => 1 })
|
22
|
-
stub_facet(:blog_id_i, { '1' => 3 })
|
23
|
-
result = session.search(Post) do
|
24
|
-
facet :title
|
25
|
-
facet :blog_id
|
26
|
-
end
|
27
|
-
result.facets.first.field_name.should == :title
|
28
|
-
result.facets.last.field_name.should == :blog_id
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'returns string facet' do
|
32
|
-
stub_facet(:title_ss, 'Author 1' => 2, 'Author 2' => 1)
|
33
|
-
result = session.search Post do
|
34
|
-
facet :title
|
35
|
-
end
|
36
|
-
facet_values(result, :title).should == ['Author 1', 'Author 2']
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'returns counts for facet' do
|
40
|
-
stub_facet(:title_ss, 'Author 1' => 2, 'Author 2' => 1)
|
41
|
-
result = session.search Post do
|
42
|
-
facet :title
|
43
|
-
end
|
44
|
-
facet_counts(result, :title).should == [2, 1]
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'returns integer facet' do
|
48
|
-
stub_facet(:blog_id_i, '3' => 2, '1' => 1)
|
49
|
-
result = session.search Post do
|
50
|
-
facet :blog_id
|
51
|
-
end
|
52
|
-
facet_values(result, :blog_id).should == [3, 1]
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'returns float facet' do
|
56
|
-
stub_facet(:average_rating_ft, '9.3' => 2, '1.1' => 1)
|
57
|
-
result = session.search Post do
|
58
|
-
facet :average_rating
|
59
|
-
end
|
60
|
-
facet_values(result, :average_rating).should == [9.3, 1.1]
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'returns time facet' do
|
64
|
-
stub_facet(
|
65
|
-
:published_at_dt,
|
66
|
-
'2009-04-07T20:25:23Z' => 3,
|
67
|
-
'2009-04-07T20:26:19Z' => 2,
|
68
|
-
'2050-04-07T20:27:15Z' => 1
|
69
|
-
)
|
70
|
-
result = session.search Post do
|
71
|
-
facet :published_at
|
72
|
-
end
|
73
|
-
# In JRuby, Time doesn't have 32-bit range constraint, apparently.
|
74
|
-
future_time =
|
75
|
-
begin
|
76
|
-
Time.gm(2050, 4, 7, 20, 27, 15)
|
77
|
-
rescue ArgumentError
|
78
|
-
DateTime.civil(2050, 4, 7, 20, 27, 15)
|
79
|
-
end
|
80
|
-
facet_values(result, :published_at).should ==
|
81
|
-
[Time.gm(2009, 4, 7, 20, 25, 23),
|
82
|
-
Time.gm(2009, 4, 7, 20, 26, 19),
|
83
|
-
future_time]
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'returns date facet' do
|
87
|
-
stub_facet(
|
88
|
-
:expire_date_d,
|
89
|
-
'2009-07-13T00:00:00Z' => 3,
|
90
|
-
'2009-04-01T00:00:00Z' => 1
|
91
|
-
)
|
92
|
-
result = session.search(Post) do
|
93
|
-
facet :expire_date
|
94
|
-
end
|
95
|
-
facet_values(result, :expire_date).should ==
|
96
|
-
[Date.new(2009, 07, 13),
|
97
|
-
Date.new(2009, 04, 01)]
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'returns trie integer facet' do
|
101
|
-
stub_facet(:size_it, '3' => 2, '1' => 1)
|
102
|
-
result = session.search Photo do
|
103
|
-
facet :size
|
104
|
-
end
|
105
|
-
facet_values(result, :size).should == [3, 1]
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'returns float facet' do
|
109
|
-
stub_facet(:average_rating_ft, '9.3' => 2, '1.1' => 1)
|
110
|
-
result = session.search Photo do
|
111
|
-
facet :average_rating
|
112
|
-
end
|
113
|
-
facet_values(result, :average_rating).should == [9.3, 1.1]
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'returns time facet' do
|
117
|
-
stub_facet(
|
118
|
-
:created_at_dt,
|
119
|
-
'2009-04-07T20:25:23Z' => 3,
|
120
|
-
'2009-04-07T20:26:19Z' => 1
|
121
|
-
)
|
122
|
-
result = session.search Photo do
|
123
|
-
facet :created_at
|
124
|
-
end
|
125
|
-
facet_values(result, :created_at).should ==
|
126
|
-
[Time.gm(2009, 04, 07, 20, 25, 23),
|
127
|
-
Time.gm(2009, 04, 07, 20, 26, 19)]
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'returns boolean facet' do
|
131
|
-
stub_facet(:featured_bs, 'true' => 3, 'false' => 1)
|
132
|
-
result = session.search(Post) { facet(:featured) }
|
133
|
-
facet_values(result, :featured).should == [true, false]
|
134
|
-
end
|
135
|
-
|
136
|
-
|
137
|
-
{ 'string' => 'blog', 'symbol' => :blog }.each_pair do |type, name|
|
138
|
-
it "returns field facet with #{type} custom name" do
|
139
|
-
stub_facet(:blog, '2' => 1, '1' => 4)
|
140
|
-
result = session.search(Post) { facet(:blog_id, :name => name) }
|
141
|
-
facet_values(result, :blog).should == [1, 2]
|
142
|
-
end
|
143
|
-
|
144
|
-
it "assigns #{type} custom name to field facet" do
|
145
|
-
stub_facet(:blog, '2' => 1)
|
146
|
-
result = session.search(Post) { facet(:blog_id, :name => name) }
|
147
|
-
result.facet(:blog).name.should == :blog
|
148
|
-
end
|
149
|
-
|
150
|
-
it "retains field name for #{type} custom-named field facet" do
|
151
|
-
stub_facet(:blog, '2' => 1)
|
152
|
-
result = session.search(Post) { facet(:blog_id, :name => name) }
|
153
|
-
result.facet(:blog).field_name.should == :blog_id
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
it 'returns class facet' do
|
158
|
-
stub_facet(:class_name, 'Post' => 3, 'Namespaced::Comment' => 1)
|
159
|
-
result = session.search(Post) { facet(:class) }
|
160
|
-
facet_values(result, :class).should == [Post, Namespaced::Comment]
|
161
|
-
end
|
162
|
-
|
163
|
-
it 'returns special :any facet' do
|
164
|
-
stub_query_facet(
|
165
|
-
'category_ids_im:[* TO *]' => 3
|
166
|
-
)
|
167
|
-
search = session.search(Post) { facet(:category_ids, :extra => :any) }
|
168
|
-
row = search.facet(:category_ids).rows.first
|
169
|
-
row.value.should == :any
|
170
|
-
row.count.should == 3
|
171
|
-
end
|
172
|
-
|
173
|
-
it 'returns special :none facet' do
|
174
|
-
stub_query_facet(
|
175
|
-
'-category_ids_im:[* TO *]' => 3
|
176
|
-
)
|
177
|
-
search = session.search(Post) { facet(:category_ids, :extra => :none) }
|
178
|
-
row = search.facet(:category_ids).rows.first
|
179
|
-
row.value.should == :none
|
180
|
-
row.count.should == 3
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'returns date range facet' do
|
184
|
-
stub_date_facet(:published_at_dt, 60*60*24, '2009-07-08T04:00:00Z' => 2, '2009-07-07T04:00:00Z' => 1)
|
185
|
-
start_time = Time.utc(2009, 7, 7, 4)
|
186
|
-
end_time = start_time + 2*24*60*60
|
187
|
-
result = session.search(Post) { facet(:published_at, :time_range => start_time..end_time) }
|
188
|
-
facet = result.facet(:published_at)
|
189
|
-
facet.rows.first.value.should == (start_time..(start_time+24*60*60))
|
190
|
-
facet.rows.last.value.should == ((start_time+24*60*60)..end_time)
|
191
|
-
end
|
192
|
-
|
193
|
-
it 'returns date range facet sorted by count' do
|
194
|
-
stub_date_facet(:published_at_dt, 60*60*24, '2009-07-08T04:00:00Z' => 2, '2009-07-07T04:00:00Z' => 1)
|
195
|
-
start_time = Time.utc(2009, 7, 7, 4)
|
196
|
-
end_time = start_time + 2*24*60*60
|
197
|
-
result = session.search(Post) { facet(:published_at, :time_range => start_time..end_time, :sort => :count) }
|
198
|
-
facet = result.facet(:published_at)
|
199
|
-
facet.rows.first.value.should == ((start_time+24*60*60)..end_time)
|
200
|
-
facet.rows.last.value.should == (start_time..(start_time+24*60*60))
|
201
|
-
end
|
202
|
-
|
203
|
-
it 'returns query facet' do
|
204
|
-
stub_query_facet(
|
205
|
-
'average_rating_ft:[3\.0 TO 5\.0]' => 3,
|
206
|
-
'average_rating_ft:[1\.0 TO 3\.0]' => 1
|
207
|
-
)
|
208
|
-
search = session.search(Post) do
|
209
|
-
facet :average_rating do
|
210
|
-
row 3.0..5.0 do
|
211
|
-
with :average_rating, 3.0..5.0
|
212
|
-
end
|
213
|
-
row 1.0..3.0 do
|
214
|
-
with :average_rating, 1.0..3.0
|
215
|
-
end
|
216
|
-
end
|
217
|
-
end
|
218
|
-
facet = search.facet(:average_rating)
|
219
|
-
facet.rows.first.value.should == (3.0..5.0)
|
220
|
-
facet.rows.first.count.should == 3
|
221
|
-
facet.rows.last.value.should == (1.0..3.0)
|
222
|
-
facet.rows.last.count.should == 1
|
223
|
-
end
|
224
|
-
|
225
|
-
describe 'query facet option handling' do
|
226
|
-
def facet_values_from_options(options = {})
|
227
|
-
session.search(Post) do
|
228
|
-
facet :average_rating, options do
|
229
|
-
row(1) { with(:average_rating, 1.0..2.0) }
|
230
|
-
row(3) { with(:average_rating, 3.0..4.0) }
|
231
|
-
row(2) { with(:average_rating, 2.0..3.0) }
|
232
|
-
row(4) { with(:average_rating, 4.0..5.0) }
|
233
|
-
end
|
234
|
-
end.facet(:average_rating).rows.map { |row| row.value }
|
235
|
-
end
|
236
|
-
|
237
|
-
before :each do
|
238
|
-
stub_query_facet(
|
239
|
-
'average_rating_ft:[1\.0 TO 2\.0]' => 2,
|
240
|
-
'average_rating_ft:[2\.0 TO 3\.0]' => 3,
|
241
|
-
'average_rating_ft:[3\.0 TO 4\.0]' => 1,
|
242
|
-
'average_rating_ft:[4\.0 TO 5\.0]' => 0
|
243
|
-
)
|
244
|
-
end
|
245
|
-
|
246
|
-
it 'sorts in order of specification if no limit is given' do
|
247
|
-
facet_values_from_options.should == [1, 3, 2]
|
248
|
-
end
|
249
|
-
|
250
|
-
it 'sorts lexically if lexical option is specified' do
|
251
|
-
facet_values_from_options(:sort => :index).should == [1, 2, 3]
|
252
|
-
end
|
253
|
-
|
254
|
-
it 'sorts by count by default if limit is given' do
|
255
|
-
facet_values_from_options(:limit => 2).should == [2, 1]
|
256
|
-
end
|
257
|
-
|
258
|
-
it 'sorts by count if count option is specified' do
|
259
|
-
facet_values_from_options(:sort => :count).should == [2, 1, 3]
|
260
|
-
end
|
261
|
-
|
262
|
-
it 'sorts lexically if lexical option is specified even if limit is given' do
|
263
|
-
facet_values_from_options(:sort => :index, :limit => 2).should == [1, 2]
|
264
|
-
end
|
265
|
-
|
266
|
-
it 'limits facets if limit option is given' do
|
267
|
-
facet_values_from_options(:limit => 1).should == [2]
|
268
|
-
end
|
269
|
-
|
270
|
-
it 'does not limit facets if limit option is negative' do
|
271
|
-
facet_values_from_options(:limit => -2).should == [1, 3, 2]
|
272
|
-
end
|
273
|
-
|
274
|
-
it 'returns all facets if limit greater than number of facets' do
|
275
|
-
facet_values_from_options(:limit => 10).should == [2, 1, 3]
|
276
|
-
end
|
277
|
-
|
278
|
-
it 'allows zero count if specified' do
|
279
|
-
facet_values_from_options(:zeros => true).should == [1, 3, 2, 4]
|
280
|
-
end
|
281
|
-
|
282
|
-
it 'sets minimum count' do
|
283
|
-
facet_values_from_options(:minimum_count => 2).should == [1, 2]
|
284
|
-
end
|
285
|
-
end
|
286
|
-
|
287
|
-
it 'returns limited field facet' do
|
288
|
-
stub_query_facet(
|
289
|
-
'category_ids_im:1' => 3,
|
290
|
-
'category_ids_im:3' => 1
|
291
|
-
)
|
292
|
-
search = session.search(Post) do
|
293
|
-
facet :category_ids, :only => [1, 3, 5]
|
294
|
-
end
|
295
|
-
facet = search.facet(:category_ids)
|
296
|
-
facet.rows.first.value.should == 1
|
297
|
-
facet.rows.first.count.should == 3
|
298
|
-
facet.rows.last.value.should == 3
|
299
|
-
facet.rows.last.count.should == 1
|
300
|
-
end
|
301
|
-
|
302
|
-
it 'returns instantiated facet values' do
|
303
|
-
blogs = Array.new(2) { Blog.new }
|
304
|
-
stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
|
305
|
-
search = session.search(Post) { facet(:blog_id) }
|
306
|
-
search.facet(:blog_id).rows.map { |row| row.instance }.should == blogs
|
307
|
-
end
|
308
|
-
|
309
|
-
it 'returns all instantiated facet rows, whether or not the instances exist' do
|
310
|
-
blogs = Array.new(2) { Blog.new }
|
311
|
-
blogs.last.destroy
|
312
|
-
stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
|
313
|
-
search = session.search(Post) { facet(:blog_id) }
|
314
|
-
search.facet(:blog_id).rows.map { |row| row.instance }.should == [blogs.first, nil]
|
315
|
-
end
|
316
|
-
|
317
|
-
it 'returns only rows with available instances if specified' do
|
318
|
-
blogs = Array.new(2) { Blog.new }
|
319
|
-
blogs.last.destroy
|
320
|
-
stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
|
321
|
-
search = session.search(Post) { facet(:blog_id) }
|
322
|
-
search.facet(:blog_id).rows(:verify => true).map { |row| row.instance }.should == blogs[0..0]
|
323
|
-
end
|
324
|
-
|
325
|
-
it 'returns both verified and unverified rows from the same facet' do
|
326
|
-
blogs = Array.new(2) { Blog.new }
|
327
|
-
blogs.last.destroy
|
328
|
-
stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
|
329
|
-
search = session.search(Post) { facet(:blog_id) }
|
330
|
-
search.facet(:blog_id).rows(:verify => true).map { |row| row.instance }.should == blogs[0..0]
|
331
|
-
search.facet(:blog_id).rows.map { |row| row.instance }.should == [blogs.first, nil]
|
332
|
-
end
|
333
|
-
|
334
|
-
it 'ignores :verify option if facet not a reference facet' do
|
335
|
-
stub_facet(:category_ids_im, '1' => 2, '2' => 1)
|
336
|
-
search = session.search(Post) { facet(:category_ids) }
|
337
|
-
search.facet(:category_ids).should have(2).rows(:verify => true)
|
338
|
-
end
|
339
|
-
|
340
|
-
it 'returns instantiated facet values for limited field facet' do
|
341
|
-
blogs = Array.new(2) { Blog.new }
|
342
|
-
stub_query_facet(
|
343
|
-
"blog_id_i:#{blogs[0].id}" => 3,
|
344
|
-
"blog_id_i:#{blogs[1].id}" => 1
|
345
|
-
)
|
346
|
-
search = session.search(Post) do
|
347
|
-
facet(:blog_id, :only => blogs.map { |blog| blog.id })
|
348
|
-
end
|
349
|
-
search.facet(:blog_id).rows.map { |row| row.instance }.should == blogs
|
350
|
-
end
|
351
|
-
|
352
|
-
it 'only queries the persistent store once for an instantiated facet' do
|
353
|
-
query_count = Blog.query_count
|
354
|
-
blogs = Array.new(2) { Blog.new }
|
355
|
-
stub_facet(:blog_id_i, blogs[0].id.to_s => 2, blogs[1].id.to_s => 1)
|
356
|
-
result = session.search(Post) { facet(:blog_id) }
|
357
|
-
result.facet(:blog_id).rows.each { |row| row.instance }
|
358
|
-
(Blog.query_count - query_count).should == 1
|
359
|
-
end
|
360
|
-
end
|