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,100 +0,0 @@
|
|
1
|
-
require File.expand_path("../spec_helper", File.dirname(__FILE__))
|
2
|
-
require File.expand_path("../helpers/search_helper", File.dirname(__FILE__))
|
3
|
-
|
4
|
-
describe "field grouping" do
|
5
|
-
before :each do
|
6
|
-
Sunspot.remove_all
|
7
|
-
|
8
|
-
@posts = [
|
9
|
-
Post.new(:title => "Title1", :ratings_average => 4),
|
10
|
-
Post.new(:title => "Title1", :ratings_average => 5),
|
11
|
-
Post.new(:title => "Title2", :ratings_average => 3)
|
12
|
-
]
|
13
|
-
|
14
|
-
Sunspot.index!(*@posts)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "allows grouping by a field" do
|
18
|
-
search = Sunspot.search(Post) do
|
19
|
-
group :title
|
20
|
-
end
|
21
|
-
|
22
|
-
search.group(:title).groups.should include { |g| g.value == "Title1" }
|
23
|
-
search.group(:title).groups.should include { |g| g.value == "Title2" }
|
24
|
-
end
|
25
|
-
|
26
|
-
it "returns the number of matches unique groups" do
|
27
|
-
search = Sunspot.search(Post) do
|
28
|
-
group :title
|
29
|
-
end
|
30
|
-
|
31
|
-
search.group(:title).total.should == 2
|
32
|
-
end
|
33
|
-
|
34
|
-
it "provides access to the number of matches before grouping" do
|
35
|
-
search = Sunspot.search(Post) do
|
36
|
-
group :title
|
37
|
-
end
|
38
|
-
|
39
|
-
search.group(:title).matches.should == @posts.length
|
40
|
-
end
|
41
|
-
|
42
|
-
it "allows grouping by multiple fields" do
|
43
|
-
search = Sunspot.search(Post) do
|
44
|
-
group :title, :sort_title
|
45
|
-
end
|
46
|
-
|
47
|
-
search.group(:title).groups.should_not be_empty
|
48
|
-
search.group(:sort_title).groups.should_not be_empty
|
49
|
-
end
|
50
|
-
|
51
|
-
it "allows specification of the number of documents per group" do
|
52
|
-
search = Sunspot.search(Post) do
|
53
|
-
group :title do
|
54
|
-
limit 2
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
title1_group = search.group(:title).groups.detect { |g| g.value == "Title1" }
|
59
|
-
title1_group.hits.length.should == 2
|
60
|
-
end
|
61
|
-
|
62
|
-
it "allows specification of the sort within groups" do
|
63
|
-
search = Sunspot.search(Post) do
|
64
|
-
group :title do
|
65
|
-
order_by(:average_rating, :desc)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
highest_ranked_post = @posts.sort_by { |p| -p.ratings_average }.first
|
70
|
-
|
71
|
-
title1_group = search.group(:title).groups.detect { |g| g.value == "Title1" }
|
72
|
-
title1_group.hits.first.primary_key.to_i.should == highest_ranked_post.id
|
73
|
-
end
|
74
|
-
|
75
|
-
it "allows pagination within groups" do
|
76
|
-
search = Sunspot.search(Post) do
|
77
|
-
group :title
|
78
|
-
paginate :per_page => 1, :page => 2
|
79
|
-
end
|
80
|
-
|
81
|
-
search.group(:title).groups.length.should eql(1)
|
82
|
-
search.group(:title).groups.first.results.should == [ @posts.last ]
|
83
|
-
end
|
84
|
-
|
85
|
-
context "returns a paginated collection" do
|
86
|
-
subject do
|
87
|
-
search = Sunspot.search(Post) do
|
88
|
-
group :title
|
89
|
-
paginate :per_page => 1, :page => 2
|
90
|
-
end
|
91
|
-
search.group(:title).groups
|
92
|
-
end
|
93
|
-
|
94
|
-
it { subject.per_page.should eql(1) }
|
95
|
-
it { subject.total_pages.should eql(2) }
|
96
|
-
it { subject.current_page.should eql(2) }
|
97
|
-
it { subject.first_page?.should be_false }
|
98
|
-
it { subject.last_page?.should be_true }
|
99
|
-
end
|
100
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe "geospatial search" do
|
4
|
-
describe "filtering by radius" do
|
5
|
-
before :all do
|
6
|
-
Sunspot.remove_all
|
7
|
-
|
8
|
-
@post = Post.new(:title => "Howdy",
|
9
|
-
:coordinates => Sunspot::Util::Coordinates.new(32, -68))
|
10
|
-
Sunspot.index!(@post)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "matches posts within the radius" do
|
14
|
-
results = Sunspot.search(Post) {
|
15
|
-
with(:coordinates_new).in_radius(32, -68, 1)
|
16
|
-
}.results
|
17
|
-
|
18
|
-
results.should include(@post)
|
19
|
-
end
|
20
|
-
|
21
|
-
it "filters out posts not in the radius" do
|
22
|
-
results = Sunspot.search(Post) {
|
23
|
-
with(:coordinates_new).in_radius(33, -68, 1)
|
24
|
-
}.results
|
25
|
-
|
26
|
-
results.should_not include(@post)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "allows conjunction queries" do
|
30
|
-
results = Sunspot.search(Post) {
|
31
|
-
any_of do
|
32
|
-
with(:coordinates_new).in_radius(32, -68, 1)
|
33
|
-
with(:coordinates_new).in_radius(35, 68, 1)
|
34
|
-
end
|
35
|
-
}.results
|
36
|
-
|
37
|
-
results.should include(@post)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "filtering by bounding box" do
|
42
|
-
before :all do
|
43
|
-
Sunspot.remove_all
|
44
|
-
|
45
|
-
@post = Post.new(:title => "Howdy",
|
46
|
-
:coordinates => Sunspot::Util::Coordinates.new(32, -68))
|
47
|
-
Sunspot.index!(@post)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "matches post within the bounding box" do
|
51
|
-
results = Sunspot.search(Post) {
|
52
|
-
with(:coordinates_new).in_bounding_box [31, -69], [33, -67]
|
53
|
-
}.results
|
54
|
-
|
55
|
-
results.should include(@post)
|
56
|
-
end
|
57
|
-
|
58
|
-
it "filters out posts not in the bounding box" do
|
59
|
-
results = Sunspot.search(Post) {
|
60
|
-
with(:coordinates_new).in_bounding_box [20, -70], [21, -69]
|
61
|
-
}.results
|
62
|
-
|
63
|
-
results.should_not include(@post)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe "ordering by geodist" do
|
68
|
-
before :all do
|
69
|
-
Sunspot.remove_all
|
70
|
-
|
71
|
-
@posts = [
|
72
|
-
Post.new(:title => "Howdy", :coordinates => Sunspot::Util::Coordinates.new(34, -68)),
|
73
|
-
Post.new(:title => "Howdy", :coordinates => Sunspot::Util::Coordinates.new(33, -68)),
|
74
|
-
Post.new(:title => "Howdy", :coordinates => Sunspot::Util::Coordinates.new(32, -68))
|
75
|
-
]
|
76
|
-
|
77
|
-
Sunspot.index!(@posts)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "orders posts by distance ascending" do
|
81
|
-
results = Sunspot.search(Post) {
|
82
|
-
order_by_geodist(:coordinates_new, 32, -68)
|
83
|
-
}.results
|
84
|
-
|
85
|
-
results.should == @posts.reverse
|
86
|
-
end
|
87
|
-
|
88
|
-
it "orders posts by distance descending" do
|
89
|
-
results = Sunspot.search(Post) {
|
90
|
-
order_by_geodist(:coordinates_new, 32, -68, :desc)
|
91
|
-
}.results
|
92
|
-
|
93
|
-
results.should == @posts
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe 'keyword highlighting' do
|
4
|
-
before :all do
|
5
|
-
@posts = []
|
6
|
-
@posts << Post.new(:body => 'And the fox laughed')
|
7
|
-
@posts << Post.new(:body => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit', :blog_id => 1)
|
8
|
-
@posts << Post.new(:body => 'Lorem ipsum dolor sit amet', :title => 'consectetur adipiscing elit', :blog_id => 1)
|
9
|
-
Sunspot.index!(*@posts)
|
10
|
-
@search_result = Sunspot.search(Post) { keywords 'fox', :highlight => true }
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should include highlights in the results' do
|
14
|
-
@search_result.hits.first.highlights.length.should == 1
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should return formatted highlight fragments' do
|
18
|
-
@search_result.hits.first.highlights(:body).first.format.should == 'And the <em>fox</em> laughed'
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should be empty for non-keyword searches' do
|
22
|
-
search_result = Sunspot.search(Post){ with :blog_id, 1 }
|
23
|
-
search_result.hits.first.highlights.should be_empty
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should process multiple keyword request on different fields with highlights correctly" do
|
27
|
-
search_results = nil
|
28
|
-
lambda do
|
29
|
-
search_results = Sunspot.search(Post) do
|
30
|
-
keywords 'Lorem ipsum', :fields => [:body] do
|
31
|
-
highlight :body
|
32
|
-
end
|
33
|
-
keywords 'consectetur', :fields => [:title] do
|
34
|
-
highlight :title
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end.should_not raise_error(RSolr::Error::Http)
|
38
|
-
search_results.results.length.should eq(1)
|
39
|
-
search_results.results.first.should eq(@posts.last)
|
40
|
-
# this one might be a Solr bug, therefore not related to Sunspot itself
|
41
|
-
# search_results.hits.first.highlights.should_not be_empty
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe 'indexing' do
|
4
|
-
it 'should index non-multivalued field with newlines' do
|
5
|
-
lambda do
|
6
|
-
Sunspot.index!(Post.new(:title => "A\nTitle"))
|
7
|
-
end.should_not raise_error
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'should correctly remove by model instance' do
|
11
|
-
post = Post.new(:title => 'test post')
|
12
|
-
Sunspot.index!(post)
|
13
|
-
Sunspot.remove!(post)
|
14
|
-
Sunspot.search(Post) { with(:title, 'test post') }.results.should be_empty
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should correctly delete by ID' do
|
18
|
-
post = Post.new(:title => 'test post')
|
19
|
-
Sunspot.index!(post)
|
20
|
-
Sunspot.remove_by_id!(Post, post.id)
|
21
|
-
Sunspot.search(Post) { with(:title, 'test post') }.results.should be_empty
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'removes documents by query' do
|
25
|
-
Sunspot.remove_all!
|
26
|
-
posts = [Post.new(:title => 'birds'), Post.new(:title => 'monkeys')]
|
27
|
-
Sunspot.index!(posts)
|
28
|
-
Sunspot.remove! do
|
29
|
-
with(:title, 'birds')
|
30
|
-
end
|
31
|
-
Sunspot.search(Post).should have(2).results
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
describe "in batches" do
|
36
|
-
let(:post_1) { Post.new :title => 'A tittle' }
|
37
|
-
let(:post_2) { Post.new :title => 'Another title' }
|
38
|
-
|
39
|
-
describe "nested" do
|
40
|
-
let(:a_nested_batch) do
|
41
|
-
Sunspot.batch do
|
42
|
-
Sunspot.index post_1
|
43
|
-
|
44
|
-
Sunspot.batch do
|
45
|
-
Sunspot.index post_2
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
it "does not fail" do
|
51
|
-
expect { a_nested_batch }.to_not raise_error
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,317 +0,0 @@
|
|
1
|
-
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
describe 'keyword search' do
|
4
|
-
describe 'generally' do
|
5
|
-
before :all do
|
6
|
-
Sunspot.remove_all
|
7
|
-
@posts = []
|
8
|
-
@posts << Post.new(:title => 'The toast elects the insufficient spirit',
|
9
|
-
:body => 'Does the wind write?')
|
10
|
-
@posts << Post.new(:title => 'A nail abbreviates the recovering insight outside the moron',
|
11
|
-
:body => 'The interpreted strain scans the buffer around the upper temper')
|
12
|
-
@posts << Post.new(:title => 'The toast abbreviates the recovering spirit',
|
13
|
-
:body => 'Does the host\'s wind interpret the buffer, moron?')
|
14
|
-
Sunspot.index!(*@posts)
|
15
|
-
@comment = Namespaced::Comment.new(:body => 'Hey there where ya goin, not exactly knowin, who says you have to call just one place toast.')
|
16
|
-
Sunspot.index!(@comment)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'matches a single keyword out of a single field' do
|
20
|
-
results = Sunspot.search(Post) { keywords 'toast' }.results
|
21
|
-
[0, 2].each { |i| results.should include(@posts[i]) }
|
22
|
-
[1].each { |i| results.should_not include(@posts[i]) }
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'matches multiple words out of a single field' do
|
26
|
-
results = Sunspot.search(Post) { keywords 'elects toast' }.results
|
27
|
-
results.should == [@posts[0]]
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'matches multiple words in multiple fields' do
|
31
|
-
results = Sunspot.search(Post) { keywords 'toast wind' }.results
|
32
|
-
[0, 2].each { |i| results.should include(@posts[i]) }
|
33
|
-
[1].each { |i| results.should_not include(@posts[i]) }
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'matches multiple types' do
|
37
|
-
results = Sunspot.search(Post, Namespaced::Comment) do
|
38
|
-
keywords 'toast'
|
39
|
-
end.results
|
40
|
-
[@posts[0], @posts[2], @comment].each { |obj| results.should include(obj) }
|
41
|
-
results.should_not include(@posts[1])
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'matches keywords from only the fields specified' do
|
45
|
-
results = Sunspot.search(Post) do
|
46
|
-
keywords 'moron', :fields => [:title]
|
47
|
-
end.results
|
48
|
-
results.should == [@posts[1]]
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'matches multiple keywords on different fields using subqueries' do
|
52
|
-
search = Sunspot.search(Post) do
|
53
|
-
keywords 'moron', :fields => [:title]
|
54
|
-
keywords 'wind', :fields => [:body]
|
55
|
-
end
|
56
|
-
search.results.should == []
|
57
|
-
|
58
|
-
search = Sunspot.search(Post) do
|
59
|
-
keywords 'moron', :fields => [:title]
|
60
|
-
keywords 'buffer', :fields => [:body]
|
61
|
-
end
|
62
|
-
search.results.should == [@posts[1]]
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'matches multiple keywords with escaped characters' do
|
66
|
-
search = Sunspot.search(Post) do
|
67
|
-
keywords 'spirit', :fields => [:title]
|
68
|
-
keywords 'host\'s', :fields => [:body]
|
69
|
-
end
|
70
|
-
search.results.should == [@posts[2]]
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'matches multiple keywords with phrase-based search' do
|
74
|
-
search = Sunspot.search(Post) do
|
75
|
-
keywords 'spirit', :fields => [:title]
|
76
|
-
keywords '"interpret the buffer"', :fields => [:body]
|
77
|
-
keywords '"does the"', :fields => [:body]
|
78
|
-
end
|
79
|
-
search.results.should == [@posts[2]]
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'matches multiple keywords different options' do
|
83
|
-
search = Sunspot.search(Post) do
|
84
|
-
keywords 'insufficient nonexistent', :fields => [:title], :minimum_match => 1
|
85
|
-
keywords 'wind does', :fields => [:body], :minimum_match => 2
|
86
|
-
end
|
87
|
-
search.results.should == [@posts[0]]
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe 'with field boost' do
|
92
|
-
before :all do
|
93
|
-
Sunspot.remove_all
|
94
|
-
@posts = [:title, :body].map { |field| Post.new(field => 'rhinoceros') }
|
95
|
-
Sunspot.index!(*@posts)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'should assign a higher score to the result matching the higher-boosted field' do
|
99
|
-
search = Sunspot.search(Post) { keywords 'rhinoceros' }
|
100
|
-
search.hits.map { |hit| hit.primary_key }.should ==
|
101
|
-
@posts.map { |post| post.id.to_s }
|
102
|
-
search.hits.first.score.should > search.hits.last.score
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe 'with document boost' do
|
107
|
-
before :all do
|
108
|
-
Sunspot.remove_all
|
109
|
-
@posts = [4.0, 2.0].map do |rating|
|
110
|
-
Post.new(:title => 'Test', :ratings_average => rating)
|
111
|
-
end
|
112
|
-
Sunspot.index!(*@posts)
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'should assign a higher score to the higher-boosted document' do
|
116
|
-
search = Sunspot.search(Post) { keywords 'test' }
|
117
|
-
search.hits.map { |hit| hit.primary_key }.should ==
|
118
|
-
@posts.map { |post| post.id.to_s }
|
119
|
-
search.hits.first.score.should > search.hits.last.score
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe 'with search-time boost' do
|
124
|
-
before :each do
|
125
|
-
Sunspot.remove_all
|
126
|
-
@comments = [
|
127
|
-
Namespaced::Comment.new(:body => 'test text'),
|
128
|
-
Namespaced::Comment.new(:author_name => 'test text')
|
129
|
-
]
|
130
|
-
Sunspot.index!(@comments)
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'assigns a higher score to documents in which all words appear in the phrase field' do
|
134
|
-
hits = Sunspot.search(Namespaced::Comment) do
|
135
|
-
keywords 'test text' do
|
136
|
-
phrase_fields :body => 2.0
|
137
|
-
end
|
138
|
-
end.hits
|
139
|
-
hits.first.instance.should == @comments.first
|
140
|
-
hits.first.score.should > hits.last.score
|
141
|
-
end
|
142
|
-
|
143
|
-
it 'assigns a higher score to documents in which the search terms appear in a boosted field' do
|
144
|
-
hits = Sunspot.search(Namespaced::Comment) do
|
145
|
-
keywords 'test' do
|
146
|
-
fields :body => 2.0, :author_name => 0.75
|
147
|
-
end
|
148
|
-
end.hits
|
149
|
-
hits.first.instance.should == @comments.first
|
150
|
-
hits.first.score.should > hits.last.score
|
151
|
-
end
|
152
|
-
|
153
|
-
it 'assigns a higher score to documents in which the search terms appear in a higher boosted phrase field' do
|
154
|
-
hits = Sunspot.search(Namespaced::Comment) do
|
155
|
-
keywords 'test text' do
|
156
|
-
phrase_fields :body => 2.0, :author_name => 0.75
|
157
|
-
end
|
158
|
-
end.hits
|
159
|
-
hits.first.instance.should == @comments.first
|
160
|
-
hits.first.score.should > hits.last.score
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
describe 'boost query' do
|
165
|
-
before :all do
|
166
|
-
Sunspot.remove_all
|
167
|
-
Sunspot.index!(
|
168
|
-
@posts = [
|
169
|
-
Post.new(:title => 'Rhino', :featured => true),
|
170
|
-
Post.new(:title => 'Rhino', :ratings_average => 3.3),
|
171
|
-
Post.new(:title => 'Rhino')
|
172
|
-
]
|
173
|
-
)
|
174
|
-
end
|
175
|
-
|
176
|
-
it 'should assign a higher score to the document matching the boost query' do
|
177
|
-
search = Sunspot.search(Post) do |query|
|
178
|
-
query.keywords('rhino') do
|
179
|
-
boost(2.0) do
|
180
|
-
with(:featured, true)
|
181
|
-
end
|
182
|
-
end
|
183
|
-
query.without(@posts[1])
|
184
|
-
end
|
185
|
-
search.results.should == [@posts[0], @posts[2]]
|
186
|
-
search.hits[0].score.should > search.hits[1].score
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'should assign scores in order of multiple boost query match' do
|
190
|
-
search = Sunspot.search(Post) do
|
191
|
-
keywords 'rhino' do
|
192
|
-
boost(2.0) { with(:featured, true) }
|
193
|
-
boost(1.5) { with(:average_rating).greater_than(3.0) }
|
194
|
-
end
|
195
|
-
end
|
196
|
-
search.results.should == @posts
|
197
|
-
search.hits[0].score.should > search.hits[1].score
|
198
|
-
search.hits[1].score.should > search.hits[2].score
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
describe 'minimum match' do
|
203
|
-
before do
|
204
|
-
Sunspot.remove_all
|
205
|
-
@posts = [
|
206
|
-
Post.new(:title => 'Pepperoni Sausage Anchovies'),
|
207
|
-
Post.new(:title => 'Pepperoni Tomatoes Mushrooms')
|
208
|
-
]
|
209
|
-
Sunspot.index!(@posts)
|
210
|
-
@search = Sunspot.search(Post) do
|
211
|
-
keywords 'pepperoni sausage extra cheese', :minimum_match => 2
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
it 'should match documents that contain the minimum_match number of search terms' do
|
216
|
-
@search.results.should include(@posts[0])
|
217
|
-
end
|
218
|
-
|
219
|
-
it 'should not match documents that do not contain the minimum_match number of search terms' do
|
220
|
-
@search.results.should_not include(@posts[1])
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
describe 'query phrase slop' do
|
225
|
-
before do
|
226
|
-
Sunspot.remove_all
|
227
|
-
@posts = [
|
228
|
-
Post.new(:title => 'One four'),
|
229
|
-
Post.new(:title => 'One three four'),
|
230
|
-
Post.new(:title => 'One two three four')
|
231
|
-
]
|
232
|
-
Sunspot.index!(@posts)
|
233
|
-
@search = Sunspot.search(Post) do
|
234
|
-
keywords '"one four"', :query_phrase_slop => 1
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
it 'should match exact phrase' do
|
239
|
-
@search.results.should include(@posts[0])
|
240
|
-
end
|
241
|
-
|
242
|
-
it 'should match phrase divided by query phrase slop terms' do
|
243
|
-
@search.results.should include(@posts[1])
|
244
|
-
end
|
245
|
-
|
246
|
-
it 'should not match phrase divided by more than query phrase slop terms' do
|
247
|
-
@search.results.should_not include(@posts[2])
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
describe 'phrase field slop' do
|
252
|
-
before do
|
253
|
-
Sunspot.remove_all
|
254
|
-
@comments = [
|
255
|
-
Namespaced::Comment.new(:author_name => 'one four'),
|
256
|
-
Namespaced::Comment.new(:body => 'one four'),
|
257
|
-
Namespaced::Comment.new(:author_name => 'one three four'),
|
258
|
-
Namespaced::Comment.new(:body => 'one three four'),
|
259
|
-
Namespaced::Comment.new(:author_name => 'one two three four'),
|
260
|
-
Namespaced::Comment.new(:body => 'one two three four')
|
261
|
-
]
|
262
|
-
Sunspot.index!(@comments)
|
263
|
-
@search = Sunspot.search(Namespaced::Comment) do
|
264
|
-
keywords 'one four' do
|
265
|
-
phrase_fields :author_name => 3.0
|
266
|
-
phrase_slop 1
|
267
|
-
end
|
268
|
-
end
|
269
|
-
@sorted_hits = @search.hits.sort_by { |hit| @comments.index(hit.instance) }
|
270
|
-
end
|
271
|
-
|
272
|
-
it 'should give phrase field boost to exact match' do
|
273
|
-
@sorted_hits[0].score.should > @sorted_hits[1].score
|
274
|
-
end
|
275
|
-
|
276
|
-
it 'should give phrase field boost to match within slop' do
|
277
|
-
@sorted_hits[2].score.should > @sorted_hits[3].score
|
278
|
-
end
|
279
|
-
|
280
|
-
it 'should not give phrase field boost to match beyond slop' do
|
281
|
-
@sorted_hits[4].score.should == @sorted_hits[5].score
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
describe 'with function queries' do
|
286
|
-
before :each do
|
287
|
-
Sunspot.remove_all
|
288
|
-
end
|
289
|
-
|
290
|
-
after :each do
|
291
|
-
@search.results.should == @posts
|
292
|
-
@search.hits.first.score.should > @search.hits.last.score
|
293
|
-
end
|
294
|
-
|
295
|
-
it 'boosts via function query with float' do
|
296
|
-
@posts = [Post.new(:title => 'test', :ratings_average => 4.0),
|
297
|
-
Post.new(:title => 'test', :ratings_average => 2.0)]
|
298
|
-
Sunspot.index!(@posts)
|
299
|
-
@search = Sunspot.search(Post) do
|
300
|
-
keywords('test') do
|
301
|
-
boost function { :average_rating }
|
302
|
-
end
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
it 'boosts via function query with date' do
|
307
|
-
@posts = [Post.new(:title => 'test', :published_at => Time.now),
|
308
|
-
Post.new(:title => 'test', :published_at => Time.now - 60*60*24*31*6)] # roughly six months ago
|
309
|
-
Sunspot.index!(@posts)
|
310
|
-
@search = Sunspot.search(Post) do
|
311
|
-
keywords('test') do
|
312
|
-
boost function { recip(ms(Time.now, :published_at), 3.16e-11, 1, 1) }
|
313
|
-
end
|
314
|
-
end
|
315
|
-
end
|
316
|
-
end
|
317
|
-
end
|