thinking-sphinx 1.2.13 → 6.0.0
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.
- checksums.yaml +7 -0
- data/.circleci/config.yml +99 -0
- data/.github/actions/test/action.yml +46 -0
- data/.github/workflows/ci.yml +75 -0
- data/.gitignore +18 -0
- data/.travis.yml +36 -0
- data/Appraisals +71 -0
- data/CHANGELOG.markdown +782 -0
- data/Gemfile +18 -0
- data/LICENCE +1 -1
- data/Procfile.support +2 -0
- data/README.textile +91 -136
- data/Rakefile +26 -0
- data/bin/console +15 -0
- data/bin/loadsphinx +99 -0
- data/bin/testmatrix +48 -0
- data/lib/thinking/sphinx.rb +3 -0
- data/lib/thinking-sphinx.rb +3 -0
- data/lib/thinking_sphinx/active_record/association.rb +19 -0
- data/lib/thinking_sphinx/active_record/association_proxy/attribute_finder.rb +44 -0
- data/lib/thinking_sphinx/active_record/association_proxy/attribute_matcher.rb +40 -0
- data/lib/thinking_sphinx/active_record/association_proxy.rb +34 -0
- data/lib/thinking_sphinx/active_record/attribute/sphinx_presenter.rb +52 -0
- data/lib/thinking_sphinx/active_record/attribute/type.rb +106 -0
- data/lib/thinking_sphinx/active_record/attribute/values.rb +20 -0
- data/lib/thinking_sphinx/active_record/attribute.rb +22 -0
- data/lib/thinking_sphinx/active_record/base.rb +91 -0
- data/lib/thinking_sphinx/active_record/callbacks/association_delta_callbacks.rb +21 -0
- data/lib/thinking_sphinx/active_record/callbacks/delete_callbacks.rb +27 -0
- data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +66 -0
- data/lib/thinking_sphinx/active_record/callbacks/update_callbacks.rb +78 -0
- data/lib/thinking_sphinx/active_record/column.rb +44 -0
- data/lib/thinking_sphinx/active_record/column_sql_presenter.rb +54 -0
- data/lib/thinking_sphinx/active_record/database_adapters/abstract_adapter.rb +19 -0
- data/lib/thinking_sphinx/active_record/database_adapters/mysql_adapter.rb +51 -0
- data/lib/thinking_sphinx/active_record/database_adapters/postgresql_adapter.rb +47 -0
- data/lib/thinking_sphinx/active_record/database_adapters.rb +59 -0
- data/lib/thinking_sphinx/active_record/depolymorph/association_reflection.rb +32 -0
- data/lib/thinking_sphinx/active_record/depolymorph/base_reflection.rb +32 -0
- data/lib/thinking_sphinx/active_record/depolymorph/conditions_reflection.rb +40 -0
- data/lib/thinking_sphinx/active_record/depolymorph/overridden_reflection.rb +50 -0
- data/lib/thinking_sphinx/active_record/depolymorph/scoped_reflection.rb +26 -0
- data/lib/thinking_sphinx/active_record/field.rb +18 -0
- data/lib/thinking_sphinx/active_record/filter_reflection.rb +18 -0
- data/lib/thinking_sphinx/active_record/index.rb +71 -0
- data/lib/thinking_sphinx/active_record/interpreter.rb +77 -0
- data/lib/thinking_sphinx/active_record/join_association.rb +17 -0
- data/lib/thinking_sphinx/active_record/log_subscriber.rb +37 -0
- data/lib/thinking_sphinx/active_record/polymorpher.rb +64 -0
- data/lib/thinking_sphinx/active_record/property.rb +30 -0
- data/lib/thinking_sphinx/active_record/property_query.rb +149 -0
- data/lib/thinking_sphinx/active_record/property_sql_presenter.rb +89 -0
- data/lib/thinking_sphinx/active_record/simple_many_query.rb +37 -0
- data/lib/thinking_sphinx/active_record/source_joins.rb +68 -0
- data/lib/thinking_sphinx/active_record/sql_builder/clause_builder.rb +29 -0
- data/lib/thinking_sphinx/active_record/sql_builder/query.rb +59 -0
- data/lib/thinking_sphinx/active_record/sql_builder/statement.rb +147 -0
- data/lib/thinking_sphinx/active_record/sql_builder.rb +107 -0
- data/lib/thinking_sphinx/active_record/sql_source/template.rb +55 -0
- data/lib/thinking_sphinx/active_record/sql_source.rb +173 -0
- data/lib/thinking_sphinx/active_record.rb +39 -301
- data/lib/thinking_sphinx/attribute_types.rb +72 -0
- data/lib/thinking_sphinx/batched_search.rb +28 -0
- data/lib/thinking_sphinx/callbacks/appender.rb +63 -0
- data/lib/thinking_sphinx/callbacks.rb +44 -0
- data/lib/thinking_sphinx/capistrano/v2.rb +60 -0
- data/lib/thinking_sphinx/capistrano/v3.rb +104 -0
- data/lib/thinking_sphinx/capistrano.rb +10 -0
- data/lib/thinking_sphinx/commander.rb +27 -0
- data/lib/thinking_sphinx/commands/base.rb +53 -0
- data/lib/thinking_sphinx/commands/clear_real_time.rb +22 -0
- data/lib/thinking_sphinx/commands/clear_sql.rb +18 -0
- data/lib/thinking_sphinx/commands/configure.rb +15 -0
- data/lib/thinking_sphinx/commands/index_real_time.rb +15 -0
- data/lib/thinking_sphinx/commands/index_sql.rb +25 -0
- data/lib/thinking_sphinx/commands/merge.rb +27 -0
- data/lib/thinking_sphinx/commands/merge_and_update.rb +57 -0
- data/lib/thinking_sphinx/commands/prepare.rb +15 -0
- data/lib/thinking_sphinx/commands/rotate.rb +13 -0
- data/lib/thinking_sphinx/commands/running.rb +15 -0
- data/lib/thinking_sphinx/commands/start_attached.rb +22 -0
- data/lib/thinking_sphinx/commands/start_detached.rb +21 -0
- data/lib/thinking_sphinx/commands/stop.rb +24 -0
- data/lib/thinking_sphinx/commands.rb +20 -0
- data/lib/thinking_sphinx/configuration/consistent_ids.rb +35 -0
- data/lib/thinking_sphinx/configuration/defaults.rb +7 -0
- data/lib/thinking_sphinx/configuration/distributed_indices.rb +31 -0
- data/lib/thinking_sphinx/configuration/duplicate_names.rb +36 -0
- data/lib/thinking_sphinx/configuration/minimum_fields.rb +36 -0
- data/lib/thinking_sphinx/configuration.rb +196 -269
- data/lib/thinking_sphinx/connection/client.rb +74 -0
- data/lib/thinking_sphinx/connection/jruby.rb +58 -0
- data/lib/thinking_sphinx/connection/mri.rb +26 -0
- data/lib/thinking_sphinx/connection.rb +73 -0
- data/lib/thinking_sphinx/core/field.rb +11 -0
- data/lib/thinking_sphinx/core/index.rb +110 -0
- data/lib/thinking_sphinx/core/interpreter.rb +25 -0
- data/lib/thinking_sphinx/core/property.rb +15 -0
- data/lib/thinking_sphinx/core/settings.rb +11 -0
- data/lib/thinking_sphinx/core.rb +11 -0
- data/lib/thinking_sphinx/deletion.rb +70 -0
- data/lib/thinking_sphinx/deltas/default_delta.rb +57 -66
- data/lib/thinking_sphinx/deltas/delete_job.rb +27 -0
- data/lib/thinking_sphinx/deltas/index_job.rb +28 -0
- data/lib/thinking_sphinx/deltas.rb +52 -27
- data/lib/thinking_sphinx/distributed/index.rb +46 -0
- data/lib/thinking_sphinx/distributed.rb +7 -0
- data/lib/thinking_sphinx/errors.rb +96 -0
- data/lib/thinking_sphinx/excerpter.rb +36 -19
- data/lib/thinking_sphinx/facet.rb +29 -122
- data/lib/thinking_sphinx/facet_search.rb +132 -125
- data/lib/thinking_sphinx/float_formatter.rb +35 -0
- data/lib/thinking_sphinx/frameworks/plain.rb +10 -0
- data/lib/thinking_sphinx/frameworks/rails.rb +11 -0
- data/lib/thinking_sphinx/frameworks.rb +11 -0
- data/lib/thinking_sphinx/guard/file.rb +28 -0
- data/lib/thinking_sphinx/guard/files.rb +40 -0
- data/lib/thinking_sphinx/guard/none.rb +7 -0
- data/lib/thinking_sphinx/guard.rb +9 -0
- data/lib/thinking_sphinx/hooks/guard_presence.rb +34 -0
- data/lib/thinking_sphinx/index.rb +50 -92
- data/lib/thinking_sphinx/index_set.rb +96 -0
- data/lib/thinking_sphinx/indexing_strategies/all_at_once.rb +9 -0
- data/lib/thinking_sphinx/indexing_strategies/one_at_a_time.rb +16 -0
- data/lib/thinking_sphinx/interfaces/base.rb +13 -0
- data/lib/thinking_sphinx/interfaces/daemon.rb +27 -0
- data/lib/thinking_sphinx/interfaces/real_time.rb +46 -0
- data/lib/thinking_sphinx/interfaces/sql.rb +53 -0
- data/lib/thinking_sphinx/interfaces.rb +10 -0
- data/lib/thinking_sphinx/logger.rb +9 -0
- data/lib/thinking_sphinx/masks/group_enumerators_mask.rb +30 -0
- data/lib/thinking_sphinx/masks/pagination_mask.rb +63 -0
- data/lib/thinking_sphinx/masks/scopes_mask.rb +56 -0
- data/lib/thinking_sphinx/masks/weight_enumerator_mask.rb +17 -0
- data/lib/thinking_sphinx/masks.rb +10 -0
- data/lib/thinking_sphinx/middlewares/active_record_translator.rb +103 -0
- data/lib/thinking_sphinx/middlewares/geographer.rb +94 -0
- data/lib/thinking_sphinx/middlewares/glazier.rb +52 -0
- data/lib/thinking_sphinx/middlewares/ids_only.rb +15 -0
- data/lib/thinking_sphinx/middlewares/inquirer.rb +64 -0
- data/lib/thinking_sphinx/middlewares/middleware.rb +11 -0
- data/lib/thinking_sphinx/middlewares/sphinxql.rb +256 -0
- data/lib/thinking_sphinx/middlewares/stale_id_checker.rb +47 -0
- data/lib/thinking_sphinx/middlewares/stale_id_filter.rb +48 -0
- data/lib/thinking_sphinx/middlewares/valid_options.rb +25 -0
- data/lib/thinking_sphinx/middlewares.rb +35 -0
- data/lib/thinking_sphinx/panes/attributes_pane.rb +11 -0
- data/lib/thinking_sphinx/panes/distance_pane.rb +15 -0
- data/lib/thinking_sphinx/panes/excerpts_pane.rb +43 -0
- data/lib/thinking_sphinx/panes/weight_pane.rb +11 -0
- data/lib/thinking_sphinx/panes.rb +10 -0
- data/lib/thinking_sphinx/processor.rb +71 -0
- data/lib/thinking_sphinx/query.rb +11 -0
- data/lib/thinking_sphinx/railtie.rb +38 -0
- data/lib/thinking_sphinx/rake_interface.rb +34 -0
- data/lib/thinking_sphinx/real_time/attribute.rb +27 -0
- data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +60 -0
- data/lib/thinking_sphinx/real_time/field.rb +9 -0
- data/lib/thinking_sphinx/real_time/index/template.rb +52 -0
- data/lib/thinking_sphinx/real_time/index.rb +102 -0
- data/lib/thinking_sphinx/real_time/interpreter.rb +54 -0
- data/lib/thinking_sphinx/real_time/populator.rb +46 -0
- data/lib/thinking_sphinx/real_time/processor.rb +36 -0
- data/lib/thinking_sphinx/real_time/property.rb +21 -0
- data/lib/thinking_sphinx/real_time/transcribe_instance.rb +38 -0
- data/lib/thinking_sphinx/real_time/transcriber.rb +89 -0
- data/lib/thinking_sphinx/real_time/translator.rb +39 -0
- data/lib/thinking_sphinx/real_time.rb +40 -0
- data/lib/thinking_sphinx/scopes.rb +34 -0
- data/lib/thinking_sphinx/search/batch_inquirer.rb +23 -0
- data/lib/thinking_sphinx/search/context.rb +31 -0
- data/lib/thinking_sphinx/search/glaze.rb +39 -0
- data/lib/thinking_sphinx/search/merger.rb +34 -0
- data/lib/thinking_sphinx/search/query.rb +33 -0
- data/lib/thinking_sphinx/search/stale_ids_exception.rb +15 -0
- data/lib/thinking_sphinx/search.rb +166 -704
- data/lib/thinking_sphinx/settings.rb +128 -0
- data/lib/thinking_sphinx/sinatra.rb +7 -0
- data/lib/thinking_sphinx/subscribers/populator_subscriber.rb +48 -0
- data/lib/thinking_sphinx/tasks.rb +70 -150
- data/lib/thinking_sphinx/test.rb +56 -0
- data/lib/thinking_sphinx/utf8.rb +18 -0
- data/lib/thinking_sphinx/wildcard.rb +42 -0
- data/lib/thinking_sphinx/with_output.rb +13 -0
- data/lib/thinking_sphinx.rb +83 -185
- data/spec/acceptance/association_scoping_spec.rb +65 -0
- data/spec/acceptance/attribute_access_spec.rb +58 -0
- data/spec/acceptance/attribute_updates_spec.rb +18 -0
- data/spec/acceptance/batch_searching_spec.rb +23 -0
- data/spec/acceptance/big_integers_spec.rb +61 -0
- data/spec/acceptance/excerpts_spec.rb +50 -0
- data/spec/acceptance/facets_spec.rb +141 -0
- data/spec/acceptance/geosearching_spec.rb +70 -0
- data/spec/acceptance/grouping_by_attributes_spec.rb +79 -0
- data/spec/acceptance/index_options_spec.rb +154 -0
- data/spec/acceptance/indexing_spec.rb +38 -0
- data/spec/acceptance/merging_spec.rb +90 -0
- data/spec/acceptance/paginating_search_results_spec.rb +42 -0
- data/spec/acceptance/real_time_updates_spec.rb +115 -0
- data/spec/acceptance/remove_deleted_records_spec.rb +99 -0
- data/spec/acceptance/search_counts_spec.rb +20 -0
- data/spec/acceptance/search_for_just_ids_spec.rb +21 -0
- data/spec/acceptance/searching_across_models_spec.rb +47 -0
- data/spec/acceptance/searching_across_schemas_spec.rb +40 -0
- data/spec/acceptance/searching_on_fields_spec.rb +59 -0
- data/spec/acceptance/searching_with_filters_spec.rb +159 -0
- data/spec/acceptance/searching_with_sti_spec.rb +76 -0
- data/spec/acceptance/searching_within_a_model_spec.rb +117 -0
- data/spec/acceptance/sorting_search_results_spec.rb +50 -0
- data/spec/acceptance/spec_helper.rb +6 -0
- data/spec/acceptance/specifying_sql_spec.rb +516 -0
- data/spec/acceptance/sphinx_scopes_spec.rb +87 -0
- data/spec/acceptance/sql_deltas_spec.rb +78 -0
- data/spec/acceptance/support/database_cleaner.rb +13 -0
- data/spec/acceptance/support/sphinx_controller.rb +62 -0
- data/spec/acceptance/support/sphinx_helpers.rb +45 -0
- data/spec/acceptance/suspended_deltas_spec.rb +56 -0
- data/spec/fixtures/database.yml +4 -0
- data/spec/internal/app/indices/admin_person_index.rb +9 -0
- data/spec/internal/app/indices/album_index.rb +9 -0
- data/spec/internal/app/indices/animal_index.rb +5 -0
- data/spec/internal/app/indices/article_index.rb +31 -0
- data/spec/internal/app/indices/bird_index.rb +6 -0
- data/spec/internal/app/indices/book_index.rb +11 -0
- data/spec/internal/app/indices/car_index.rb +7 -0
- data/spec/internal/app/indices/city_index.rb +9 -0
- data/spec/internal/app/indices/colour_index.rb +7 -0
- data/spec/internal/app/indices/product_index.rb +27 -0
- data/spec/internal/app/indices/tee_index.rb +6 -0
- data/spec/internal/app/indices/user_index.rb +9 -0
- data/spec/internal/app/models/admin/person.rb +9 -0
- data/spec/internal/app/models/album.rb +25 -0
- data/spec/internal/app/models/animal.rb +5 -0
- data/spec/internal/app/models/article.rb +9 -0
- data/spec/internal/app/models/bird.rb +5 -0
- data/spec/internal/app/models/book.rb +18 -0
- data/spec/internal/app/models/car.rb +7 -0
- data/spec/internal/app/models/categorisation.rb +15 -0
- data/spec/internal/app/models/category.rb +6 -0
- data/spec/internal/app/models/city.rb +7 -0
- data/spec/internal/app/models/colour.rb +7 -0
- data/spec/internal/app/models/event.rb +5 -0
- data/spec/internal/app/models/flightless_bird.rb +4 -0
- data/spec/internal/app/models/genre.rb +5 -0
- data/spec/internal/app/models/hardcover.rb +5 -0
- data/spec/internal/app/models/mammal.rb +4 -0
- data/spec/internal/app/models/manufacturer.rb +5 -0
- data/spec/internal/app/models/product.rb +8 -0
- data/spec/internal/app/models/tag.rb +6 -0
- data/{features/support → spec/internal/app}/models/tagging.rb +3 -1
- data/spec/internal/app/models/tee.rb +10 -0
- data/spec/internal/app/models/tweet.rb +5 -0
- data/spec/internal/app/models/user.rb +10 -0
- data/spec/internal/config/database.yml +17 -0
- data/spec/internal/db/schema.rb +115 -0
- data/spec/internal/tmp/.gitkeep +0 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/support/json_column.rb +35 -0
- data/spec/support/multi_schema.rb +50 -0
- data/spec/support/mysql.rb +25 -0
- data/spec/support/sphinx_yaml_helpers.rb +16 -0
- data/spec/thinking_sphinx/active_record/association_spec.rb +14 -0
- data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +165 -0
- data/spec/thinking_sphinx/active_record/base_spec.rb +131 -0
- data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +128 -0
- data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +176 -0
- data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +91 -0
- data/spec/thinking_sphinx/active_record/column_spec.rb +72 -0
- data/spec/thinking_sphinx/active_record/column_sql_presenter_spec.rb +39 -0
- data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +33 -0
- data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +70 -0
- data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +66 -0
- data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +128 -0
- data/spec/thinking_sphinx/active_record/field_spec.rb +51 -0
- data/spec/thinking_sphinx/active_record/filter_reflection_spec.rb +207 -0
- data/spec/thinking_sphinx/active_record/index_spec.rb +220 -0
- data/spec/thinking_sphinx/active_record/interpreter_spec.rb +329 -0
- data/spec/thinking_sphinx/active_record/polymorpher_spec.rb +87 -0
- data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +264 -0
- data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +662 -0
- data/spec/thinking_sphinx/active_record/sql_source_spec.rb +507 -0
- data/spec/thinking_sphinx/attribute_types_spec.rb +52 -0
- data/spec/thinking_sphinx/commands/clear_real_time_spec.rb +46 -0
- data/spec/thinking_sphinx/commands/clear_sql_spec.rb +52 -0
- data/spec/thinking_sphinx/commands/configure_spec.rb +31 -0
- data/spec/thinking_sphinx/commands/index_real_time_spec.rb +33 -0
- data/spec/thinking_sphinx/commands/index_sql_spec.rb +86 -0
- data/spec/thinking_sphinx/commands/merge_and_update_spec.rb +106 -0
- data/spec/thinking_sphinx/commands/merge_spec.rb +48 -0
- data/spec/thinking_sphinx/commands/prepare_spec.rb +31 -0
- data/spec/thinking_sphinx/commands/running_spec.rb +30 -0
- data/spec/thinking_sphinx/commands/start_detached_spec.rb +67 -0
- data/spec/thinking_sphinx/commands/stop_spec.rb +63 -0
- data/spec/thinking_sphinx/configuration/minimum_fields_spec.rb +60 -0
- data/spec/thinking_sphinx/configuration_spec.rb +582 -0
- data/spec/thinking_sphinx/connection/mri_spec.rb +49 -0
- data/spec/thinking_sphinx/connection_spec.rb +87 -0
- data/spec/thinking_sphinx/deletion_spec.rb +57 -0
- data/spec/thinking_sphinx/deltas/default_delta_spec.rb +123 -0
- data/spec/thinking_sphinx/deltas_spec.rb +77 -0
- data/spec/thinking_sphinx/errors_spec.rb +103 -0
- data/spec/thinking_sphinx/excerpter_spec.rb +53 -0
- data/spec/thinking_sphinx/facet_search_spec.rb +133 -0
- data/spec/thinking_sphinx/hooks/guard_presence_spec.rb +30 -0
- data/spec/thinking_sphinx/index_set_spec.rb +132 -0
- data/spec/thinking_sphinx/index_spec.rb +140 -0
- data/spec/thinking_sphinx/interfaces/daemon_spec.rb +60 -0
- data/spec/thinking_sphinx/interfaces/real_time_spec.rb +109 -0
- data/spec/thinking_sphinx/interfaces/sql_spec.rb +122 -0
- data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +123 -0
- data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +139 -0
- data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +180 -0
- data/spec/thinking_sphinx/middlewares/geographer_spec.rb +102 -0
- data/spec/thinking_sphinx/middlewares/glazier_spec.rb +65 -0
- data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +72 -0
- data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +401 -0
- data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +50 -0
- data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +113 -0
- data/spec/thinking_sphinx/middlewares/valid_options_spec.rb +51 -0
- data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +23 -0
- data/spec/thinking_sphinx/panes/distance_pane_spec.rb +43 -0
- data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +53 -0
- data/spec/thinking_sphinx/panes/weight_pane_spec.rb +22 -0
- data/spec/thinking_sphinx/rake_interface_spec.rb +39 -0
- data/spec/thinking_sphinx/real_time/attribute_spec.rb +64 -0
- data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +238 -0
- data/spec/thinking_sphinx/real_time/field_spec.rb +69 -0
- data/spec/thinking_sphinx/real_time/index_spec.rb +230 -0
- data/spec/thinking_sphinx/real_time/interpreter_spec.rb +203 -0
- data/spec/thinking_sphinx/real_time/transcribe_instance_spec.rb +35 -0
- data/spec/thinking_sphinx/real_time/transcriber_spec.rb +109 -0
- data/spec/thinking_sphinx/real_time/translator_spec.rb +17 -0
- data/spec/thinking_sphinx/scopes_spec.rb +51 -0
- data/spec/thinking_sphinx/search/glaze_spec.rb +79 -0
- data/spec/thinking_sphinx/search/query_spec.rb +87 -0
- data/spec/thinking_sphinx/search_spec.rb +214 -0
- data/spec/thinking_sphinx/wildcard_spec.rb +53 -0
- data/spec/thinking_sphinx_spec.rb +44 -0
- data/thinking-sphinx.gemspec +42 -0
- metadata +656 -243
- data/VERSION.yml +0 -5
- data/features/alternate_primary_key.feature +0 -27
- data/features/attribute_transformation.feature +0 -22
- data/features/attribute_updates.feature +0 -33
- data/features/datetime_deltas.feature +0 -66
- data/features/delayed_delta_indexing.feature +0 -37
- data/features/deleting_instances.feature +0 -64
- data/features/direct_attributes.feature +0 -11
- data/features/excerpts.feature +0 -13
- data/features/extensible_delta_indexing.feature +0 -9
- data/features/facets.feature +0 -76
- data/features/facets_across_model.feature +0 -29
- data/features/handling_edits.feature +0 -92
- data/features/retry_stale_indexes.feature +0 -24
- data/features/searching_across_models.feature +0 -20
- data/features/searching_by_model.feature +0 -175
- data/features/searching_with_find_arguments.feature +0 -56
- data/features/sphinx_detection.feature +0 -25
- data/features/sphinx_scopes.feature +0 -35
- data/features/step_definitions/alpha_steps.rb +0 -3
- data/features/step_definitions/beta_steps.rb +0 -7
- data/features/step_definitions/common_steps.rb +0 -178
- data/features/step_definitions/datetime_delta_steps.rb +0 -15
- data/features/step_definitions/delayed_delta_indexing_steps.rb +0 -7
- data/features/step_definitions/extensible_delta_indexing_steps.rb +0 -7
- data/features/step_definitions/facet_steps.rb +0 -92
- data/features/step_definitions/find_arguments_steps.rb +0 -36
- data/features/step_definitions/gamma_steps.rb +0 -15
- data/features/step_definitions/scope_steps.rb +0 -11
- data/features/step_definitions/search_steps.rb +0 -89
- data/features/step_definitions/sphinx_steps.rb +0 -31
- data/features/sti_searching.feature +0 -14
- data/features/support/database.example.yml +0 -3
- data/features/support/database.yml +0 -5
- data/features/support/db/active_record.rb +0 -40
- data/features/support/db/database.yml +0 -5
- data/features/support/db/fixtures/alphas.rb +0 -10
- data/features/support/db/fixtures/authors.rb +0 -1
- data/features/support/db/fixtures/betas.rb +0 -10
- data/features/support/db/fixtures/boxes.rb +0 -9
- data/features/support/db/fixtures/categories.rb +0 -1
- data/features/support/db/fixtures/cats.rb +0 -3
- data/features/support/db/fixtures/comments.rb +0 -24
- data/features/support/db/fixtures/delayed_betas.rb +0 -10
- data/features/support/db/fixtures/developers.rb +0 -29
- data/features/support/db/fixtures/dogs.rb +0 -3
- data/features/support/db/fixtures/extensible_betas.rb +0 -10
- data/features/support/db/fixtures/gammas.rb +0 -10
- data/features/support/db/fixtures/people.rb +0 -1001
- data/features/support/db/fixtures/posts.rb +0 -6
- data/features/support/db/fixtures/robots.rb +0 -14
- data/features/support/db/fixtures/tags.rb +0 -27
- data/features/support/db/fixtures/thetas.rb +0 -10
- data/features/support/db/migrations/create_alphas.rb +0 -7
- data/features/support/db/migrations/create_animals.rb +0 -5
- data/features/support/db/migrations/create_authors.rb +0 -3
- data/features/support/db/migrations/create_authors_posts.rb +0 -6
- data/features/support/db/migrations/create_betas.rb +0 -5
- data/features/support/db/migrations/create_boxes.rb +0 -5
- data/features/support/db/migrations/create_categories.rb +0 -3
- data/features/support/db/migrations/create_comments.rb +0 -10
- data/features/support/db/migrations/create_delayed_betas.rb +0 -17
- data/features/support/db/migrations/create_developers.rb +0 -9
- data/features/support/db/migrations/create_extensible_betas.rb +0 -5
- data/features/support/db/migrations/create_gammas.rb +0 -3
- data/features/support/db/migrations/create_people.rb +0 -13
- data/features/support/db/migrations/create_posts.rb +0 -5
- data/features/support/db/migrations/create_robots.rb +0 -4
- data/features/support/db/migrations/create_taggings.rb +0 -5
- data/features/support/db/migrations/create_tags.rb +0 -4
- data/features/support/db/migrations/create_thetas.rb +0 -5
- data/features/support/db/mysql.rb +0 -3
- data/features/support/db/postgresql.rb +0 -3
- data/features/support/env.rb +0 -18
- data/features/support/lib/generic_delta_handler.rb +0 -8
- data/features/support/models/alpha.rb +0 -10
- data/features/support/models/animal.rb +0 -5
- data/features/support/models/author.rb +0 -3
- data/features/support/models/beta.rb +0 -8
- data/features/support/models/box.rb +0 -8
- data/features/support/models/cat.rb +0 -3
- data/features/support/models/category.rb +0 -4
- data/features/support/models/comment.rb +0 -10
- data/features/support/models/delayed_beta.rb +0 -7
- data/features/support/models/developer.rb +0 -16
- data/features/support/models/dog.rb +0 -3
- data/features/support/models/extensible_beta.rb +0 -9
- data/features/support/models/gamma.rb +0 -5
- data/features/support/models/person.rb +0 -23
- data/features/support/models/post.rb +0 -20
- data/features/support/models/robot.rb +0 -12
- data/features/support/models/tag.rb +0 -3
- data/features/support/models/theta.rb +0 -7
- data/features/support/post_database.rb +0 -43
- data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -125
- data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -20
- data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -48
- data/lib/thinking_sphinx/active_record/delta.rb +0 -87
- data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -28
- data/lib/thinking_sphinx/active_record/scopes.rb +0 -39
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -42
- data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -54
- data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -143
- data/lib/thinking_sphinx/association.rb +0 -164
- data/lib/thinking_sphinx/attribute.rb +0 -341
- data/lib/thinking_sphinx/class_facet.rb +0 -15
- data/lib/thinking_sphinx/core/array.rb +0 -7
- data/lib/thinking_sphinx/core/string.rb +0 -15
- data/lib/thinking_sphinx/deltas/datetime_delta.rb +0 -50
- data/lib/thinking_sphinx/deltas/delayed_delta/delta_job.rb +0 -24
- data/lib/thinking_sphinx/deltas/delayed_delta/flag_as_deleted_job.rb +0 -27
- data/lib/thinking_sphinx/deltas/delayed_delta/job.rb +0 -26
- data/lib/thinking_sphinx/deltas/delayed_delta.rb +0 -30
- data/lib/thinking_sphinx/deploy/capistrano.rb +0 -100
- data/lib/thinking_sphinx/field.rb +0 -82
- data/lib/thinking_sphinx/index/builder.rb +0 -286
- data/lib/thinking_sphinx/index/faux_column.rb +0 -110
- data/lib/thinking_sphinx/property.rb +0 -162
- data/lib/thinking_sphinx/rails_additions.rb +0 -150
- data/lib/thinking_sphinx/search_methods.rb +0 -421
- data/lib/thinking_sphinx/source/internal_properties.rb +0 -46
- data/lib/thinking_sphinx/source/sql.rb +0 -128
- data/lib/thinking_sphinx/source.rb +0 -150
- data/rails/init.rb +0 -14
- data/spec/lib/thinking_sphinx/active_record/delta_spec.rb +0 -130
- data/spec/lib/thinking_sphinx/active_record/has_many_association_spec.rb +0 -49
- data/spec/lib/thinking_sphinx/active_record/scopes_spec.rb +0 -96
- data/spec/lib/thinking_sphinx/active_record_spec.rb +0 -353
- data/spec/lib/thinking_sphinx/association_spec.rb +0 -239
- data/spec/lib/thinking_sphinx/attribute_spec.rb +0 -507
- data/spec/lib/thinking_sphinx/configuration_spec.rb +0 -268
- data/spec/lib/thinking_sphinx/core/array_spec.rb +0 -9
- data/spec/lib/thinking_sphinx/core/string_spec.rb +0 -9
- data/spec/lib/thinking_sphinx/deltas/job_spec.rb +0 -32
- data/spec/lib/thinking_sphinx/excerpter_spec.rb +0 -57
- data/spec/lib/thinking_sphinx/facet_search_spec.rb +0 -176
- data/spec/lib/thinking_sphinx/facet_spec.rb +0 -333
- data/spec/lib/thinking_sphinx/field_spec.rb +0 -154
- data/spec/lib/thinking_sphinx/index/builder_spec.rb +0 -455
- data/spec/lib/thinking_sphinx/index/faux_column_spec.rb +0 -30
- data/spec/lib/thinking_sphinx/index_spec.rb +0 -45
- data/spec/lib/thinking_sphinx/rails_additions_spec.rb +0 -203
- data/spec/lib/thinking_sphinx/search_methods_spec.rb +0 -152
- data/spec/lib/thinking_sphinx/search_spec.rb +0 -1101
- data/spec/lib/thinking_sphinx/source_spec.rb +0 -227
- data/spec/lib/thinking_sphinx_spec.rb +0 -162
- data/tasks/distribution.rb +0 -53
- data/tasks/rails.rake +0 -1
- data/tasks/testing.rb +0 -72
- data/vendor/after_commit/LICENSE +0 -20
- data/vendor/after_commit/README +0 -16
- data/vendor/after_commit/Rakefile +0 -22
- data/vendor/after_commit/init.rb +0 -8
- data/vendor/after_commit/lib/after_commit/active_record.rb +0 -114
- data/vendor/after_commit/lib/after_commit/connection_adapters.rb +0 -103
- data/vendor/after_commit/lib/after_commit.rb +0 -45
- data/vendor/after_commit/test/after_commit_test.rb +0 -53
- data/vendor/delayed_job/lib/delayed/job.rb +0 -251
- data/vendor/delayed_job/lib/delayed/message_sending.rb +0 -7
- data/vendor/delayed_job/lib/delayed/performable_method.rb +0 -55
- data/vendor/delayed_job/lib/delayed/worker.rb +0 -54
- data/vendor/riddle/lib/riddle/client/filter.rb +0 -53
- data/vendor/riddle/lib/riddle/client/message.rb +0 -66
- data/vendor/riddle/lib/riddle/client/response.rb +0 -84
- data/vendor/riddle/lib/riddle/client.rb +0 -635
- data/vendor/riddle/lib/riddle/configuration/distributed_index.rb +0 -48
- data/vendor/riddle/lib/riddle/configuration/index.rb +0 -142
- data/vendor/riddle/lib/riddle/configuration/indexer.rb +0 -19
- data/vendor/riddle/lib/riddle/configuration/remote_index.rb +0 -17
- data/vendor/riddle/lib/riddle/configuration/searchd.rb +0 -25
- data/vendor/riddle/lib/riddle/configuration/section.rb +0 -43
- data/vendor/riddle/lib/riddle/configuration/source.rb +0 -23
- data/vendor/riddle/lib/riddle/configuration/sql_source.rb +0 -34
- data/vendor/riddle/lib/riddle/configuration/xml_source.rb +0 -28
- data/vendor/riddle/lib/riddle/configuration.rb +0 -33
- data/vendor/riddle/lib/riddle/controller.rb +0 -53
- data/vendor/riddle/lib/riddle.rb +0 -30
data/Gemfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source 'https://rubygems.org'
|
|
4
|
+
|
|
5
|
+
gemspec
|
|
6
|
+
|
|
7
|
+
gem 'logger'
|
|
8
|
+
gem 'mysql2', '~> 0.5.0', :platform => :ruby
|
|
9
|
+
gem 'pg', '~> 0.18.4', :platform => :ruby
|
|
10
|
+
|
|
11
|
+
gem 'activerecord', '< 7' if RUBY_VERSION.to_f <= 2.4
|
|
12
|
+
|
|
13
|
+
if RUBY_PLATFORM == 'java'
|
|
14
|
+
gem 'jdbc-mysql', '5.1.35', :platform => :jruby
|
|
15
|
+
gem 'activerecord-jdbcmysql-adapter', '>= 1.3.23', :platform => :jruby
|
|
16
|
+
gem 'activerecord-jdbcpostgresql-adapter', '>= 1.3.23', :platform => :jruby
|
|
17
|
+
gem 'activerecord', '>= 3.2.22'
|
|
18
|
+
end
|
data/LICENCE
CHANGED
data/Procfile.support
ADDED
data/README.textile
CHANGED
|
@@ -1,144 +1,99 @@
|
|
|
1
1
|
h1. Thinking Sphinx
|
|
2
2
|
|
|
3
|
+
Thinking Sphinx is a library for connecting ActiveRecord to the Sphinx full-text search tool, and integrates closely with Rails (but also works with other Ruby web frameworks). The current release is v6.0.0.
|
|
4
|
+
|
|
5
|
+
h2. Upgrading
|
|
6
|
+
|
|
7
|
+
Please refer to "the changelog":https://github.com/pat/thinking-sphinx/blob/develop/CHANGELOG.markdown and "release notes":https://github.com/pat/thinking-sphinx/releases for any changes you need to make when upgrading. The release notes in particular are quite good at covering breaking changes and more details for new features.
|
|
8
|
+
|
|
9
|
+
The documentation also has more details on what's involved for upgrading from "v4 to v5":https://freelancing-gods.com/thinking-sphinx/v5/upgrading.html, "v3 to v4":https://freelancing-gods.com/thinking-sphinx/v4/upgrading.html, and "v1/v2 to v3":https://freelancing-gods.com/thinking-sphinx/v3/upgrading.html.
|
|
10
|
+
|
|
11
|
+
h2. Installation
|
|
12
|
+
|
|
13
|
+
It's a gem, so install it like you would any other gem. You will also need to specify the mysql2 gem if you're using MRI, or jdbc-mysql if you're using JRuby:
|
|
14
|
+
|
|
15
|
+
<pre><code>gem 'mysql2', '~> 0.4', :platform => :ruby
|
|
16
|
+
gem 'jdbc-mysql', '~> 5.1.35', :platform => :jruby
|
|
17
|
+
gem 'thinking-sphinx', '~> 6.0'</code></pre>
|
|
18
|
+
|
|
19
|
+
The MySQL gems mentioned are required for connecting to Sphinx, so please include it even when you're using PostgreSQL for your database.
|
|
20
|
+
|
|
21
|
+
You'll also need to install Sphinx - this is covered in "the extended documentation":https://freelancing-gods.com/thinking-sphinx/installing_sphinx.html.
|
|
22
|
+
|
|
3
23
|
h2. Usage
|
|
4
24
|
|
|
5
|
-
|
|
25
|
+
Begin by reading the "quick-start guide":https://freelancing-gods.com/thinking-sphinx/quickstart.html, and beyond that, "the documentation":https://freelancing-gods.com/thinking-sphinx/ should serve you pretty well.
|
|
26
|
+
|
|
27
|
+
h2. Requirements
|
|
28
|
+
|
|
29
|
+
The current release of Thinking Sphinx works with the following versions of its dependencies:
|
|
30
|
+
|
|
31
|
+
|_. Library |_. Minimum |_. Tested Against |
|
|
32
|
+
| Ruby | v3.0 | v3.0..v4.0 |
|
|
33
|
+
| Sphinx | v2.2.11 | v2.2.11, v3.4.1 |
|
|
34
|
+
| Manticore | v2.8 | v4.0, v6.0 |
|
|
35
|
+
| ActiveRecord | v6.1 | v6.1..v8.1 |
|
|
36
|
+
|
|
37
|
+
It _might_ work with older versions of Ruby (back to v2.7) and Rails (back to v5.0), but it's highly recommended to update to a supported release.
|
|
38
|
+
|
|
39
|
+
It should also work with JRuby, but the test environment for that in CI has been unreliable, hence that's not actively tested against at the moment.
|
|
40
|
+
|
|
41
|
+
h3. Sphinx or Manticore
|
|
42
|
+
|
|
43
|
+
If you're using Sphinx, v2.2.11 is recommended even though it's quite old, as it works well with PostgreSQL databases (but if you're using MySQL - or real-time indices - then v3.3.1 should also be fine).
|
|
44
|
+
|
|
45
|
+
If you're opting for Manticore instead, v2.8 or newer works, but v4 or newer is recommended as that's what is actively tested against. The v4.2 and 5.0 releases had bugs with facet searching, but that's been fixed in Manticore v6.0.
|
|
6
46
|
|
|
7
|
-
|
|
47
|
+
h3. Rails and ActiveRecord
|
|
48
|
+
|
|
49
|
+
Currently Thinking Sphinx is built to support Rails/ActiveRecord 6.1 or newer. If you're using Sinatra and ActiveRecord instead of Rails, that's fine - just make sure you add the @:require => 'thinking_sphinx/sinatra'@ option when listing @thinking-sphinx@ in your Gemfile.
|
|
50
|
+
|
|
51
|
+
The last releases for older Rails versions:
|
|
52
|
+
|
|
53
|
+
|_. Rails Version |_. Thinking Sphinx Version |
|
|
54
|
+
| 6.0 | v5.6.0 |
|
|
55
|
+
| 5.2 | v5.6.0 |
|
|
56
|
+
| 5.1 | v5.6.0 |
|
|
57
|
+
| 5.0 | v5.6.0 |
|
|
58
|
+
| 4.2 | v5.6.0 |
|
|
59
|
+
| 4.1 | v4.4.1 |
|
|
60
|
+
| 4.0 | v4.4.1 |
|
|
61
|
+
| 3.2 | v4.4.1 |
|
|
62
|
+
| 3.1 | v3.0.6 |
|
|
63
|
+
| 3.0 | v2.1.0 |
|
|
64
|
+
| 2.3 | v1.5.0 |
|
|
65
|
+
|
|
66
|
+
Please note that these older versions are no longer actively supported.
|
|
67
|
+
|
|
68
|
+
h3. Ruby
|
|
69
|
+
|
|
70
|
+
You'll need either the standard Ruby (v3.0 or newer) or JRuby (9.1 or newer). The last release to support Ruby 2.4-2.7 is v5.6.0.
|
|
71
|
+
|
|
72
|
+
h3. Database Versions
|
|
73
|
+
|
|
74
|
+
MySQL 5.x and Postgres 8.4 or better are supported.
|
|
8
75
|
|
|
9
76
|
h2. Contributing
|
|
10
77
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
To
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
You should now have a passing test suite from which to build your patch on.
|
|
34
|
-
|
|
35
|
-
rake spec
|
|
36
|
-
|
|
37
|
-
If you get the message "Failed to start searchd daemon", run the spec with sudo:
|
|
38
|
-
|
|
39
|
-
sudo rake spec
|
|
40
|
-
|
|
41
|
-
If you quit the spec suite before it's completed, you may be left with data in the test
|
|
42
|
-
database, causing the next run to have failures. Let that run complete and then try again.
|
|
43
|
-
|
|
44
|
-
h2. Contributors
|
|
45
|
-
|
|
46
|
-
Since I first released this library, there's been quite a few people who have submitted patches, to my immense gratitude. Others have suggested syntax changes and general improvements. So my thanks to the following people:
|
|
47
|
-
|
|
48
|
-
* Joost Hietbrink
|
|
49
|
-
* Jonathan Conway
|
|
50
|
-
* Gregory Mirzayantz
|
|
51
|
-
* Tung Nguyen
|
|
52
|
-
* Sean Cribbs
|
|
53
|
-
* Benoit Caccinolo
|
|
54
|
-
* John Barton
|
|
55
|
-
* Oliver Beddows
|
|
56
|
-
* Arthur Zapparoli
|
|
57
|
-
* Dusty Doris
|
|
58
|
-
* Marcus Crafter
|
|
59
|
-
* Patrick Lenz
|
|
60
|
-
* Björn Andreasson
|
|
61
|
-
* James Healy
|
|
62
|
-
* Jae-Jun Hwang
|
|
63
|
-
* Xavier Shay
|
|
64
|
-
* Jason Rust
|
|
65
|
-
* Gopal Patel
|
|
66
|
-
* Chris Heald
|
|
67
|
-
* Peter Vandenberk
|
|
68
|
-
* Josh French
|
|
69
|
-
* Andrew Bennett
|
|
70
|
-
* Jordan Fowler
|
|
71
|
-
* Seth Walker
|
|
72
|
-
* Joe Noon
|
|
73
|
-
* Wolfgang Postler
|
|
74
|
-
* Rick Olson
|
|
75
|
-
* Killian Murphy
|
|
76
|
-
* Morten Primdahl
|
|
77
|
-
* Ryan Bates
|
|
78
|
-
* David Eisinger
|
|
79
|
-
* Shay Arnett
|
|
80
|
-
* Minh Tran
|
|
81
|
-
* Jeremy Durham
|
|
82
|
-
* Piotr Sarnacki
|
|
83
|
-
* Matt Johnson
|
|
84
|
-
* Nicolas Blanco
|
|
85
|
-
* Max Lapshin
|
|
86
|
-
* Josh Natanson
|
|
87
|
-
* Philip Hallstrom
|
|
88
|
-
* Christian Rishøj
|
|
89
|
-
* Mike Flester
|
|
90
|
-
* Jim Remsik
|
|
91
|
-
* Kennon Ballou
|
|
92
|
-
* Henrik Nyh
|
|
93
|
-
* Emil Tin
|
|
94
|
-
* Doug Cole
|
|
95
|
-
* Ed Hickey
|
|
96
|
-
* Evan Weaver
|
|
97
|
-
* Thibaut Barrere
|
|
98
|
-
* Kristopher Chambers
|
|
99
|
-
* Dmitrij Smalko
|
|
100
|
-
* Aleksey Yeschenko
|
|
101
|
-
* Lachie Cox
|
|
102
|
-
* Lourens Naude
|
|
103
|
-
* Tom Davies
|
|
104
|
-
* Dan Pickett
|
|
105
|
-
* Alex Caudill
|
|
106
|
-
* Jim Benton
|
|
107
|
-
* John Aughey
|
|
108
|
-
* Keith Pitty
|
|
109
|
-
* Jeff Talbot
|
|
110
|
-
* Dana Contreras
|
|
111
|
-
* Menno van der Sman
|
|
112
|
-
* Bill Harding
|
|
113
|
-
* Isaac Feliu
|
|
114
|
-
* Andrei Bocan
|
|
115
|
-
* László Bácsi
|
|
116
|
-
* Peter Wagenet
|
|
117
|
-
* Max Lapshin
|
|
118
|
-
* Martin Emde
|
|
119
|
-
* David Wennergren
|
|
120
|
-
* Mark Lane
|
|
121
|
-
* Eric Lindvall
|
|
122
|
-
* Lawrence Pit
|
|
123
|
-
* Mike Bailey
|
|
124
|
-
* Bill Leeper
|
|
125
|
-
* Michael Reinsch
|
|
126
|
-
* Anderson Dias
|
|
127
|
-
* Jerome Riga
|
|
128
|
-
* Tien Dung
|
|
129
|
-
* Johannes Kaefer
|
|
130
|
-
* Paul Campbell
|
|
131
|
-
* Matthew Beale
|
|
132
|
-
* Tom Simnett
|
|
133
|
-
* Erik Ostrom
|
|
134
|
-
* Ole Riesenberg
|
|
135
|
-
* Josh Kalderimis
|
|
136
|
-
* J.D. Hollis
|
|
137
|
-
* Jeffrey Chupp
|
|
138
|
-
* Rob Anderton
|
|
139
|
-
* Zach Inglis
|
|
140
|
-
* Ward Bekker
|
|
141
|
-
* Brian Terlson
|
|
142
|
-
* Christian Aust
|
|
143
|
-
* Martin Sarasale
|
|
144
|
-
* Édouard Brière
|
|
78
|
+
Please note that this project has a "Contributor Code of Conduct":http://contributor-covenant.org/version/1/0/0/. By participating in this project you agree to abide by its terms.
|
|
79
|
+
|
|
80
|
+
To contribute, clone this repository and have a good look through the specs - you'll notice the distinction between acceptance tests that actually use Sphinx and go through the full stack, and unit tests (everything else) which use liberal test doubles to ensure they're only testing the behaviour of the class in question. I've found this leads to far better code design.
|
|
81
|
+
|
|
82
|
+
All development is done on the @develop@ branch; please base any pull requests off of that branch. Please write the tests and then the code to get them passing, and send through a pull request.
|
|
83
|
+
|
|
84
|
+
In order to run the tests, you'll need to create a database named @thinking_sphinx@:
|
|
85
|
+
|
|
86
|
+
<pre><code># Either fire up a MySQL console:
|
|
87
|
+
mysql -u root
|
|
88
|
+
# OR a PostgreSQL console:
|
|
89
|
+
psql
|
|
90
|
+
# In that console, create the database:
|
|
91
|
+
CREATE DATABASE thinking_sphinx;</code></pre>
|
|
92
|
+
|
|
93
|
+
You can then run the unit tests with @rake spec:unit@, the acceptance tests with @rake spec:acceptance@, or all of the tests with just @rake@. To run these with PostgreSQL, you'll need to set the @DATABASE@ environment variable accordingly:
|
|
94
|
+
|
|
95
|
+
<pre><code>DATABASE=postgresql rake</code></pre>
|
|
96
|
+
|
|
97
|
+
h2. Licence
|
|
98
|
+
|
|
99
|
+
Copyright (c) 2007-2026, Thinking Sphinx is developed and maintained by Pat Allan, and is released under the open MIT Licence. Many thanks to "all who have contributed patches":https://github.com/pat/thinking-sphinx/contributors.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bundler'
|
|
4
|
+
require 'appraisal'
|
|
5
|
+
|
|
6
|
+
Bundler::GemHelper.install_tasks
|
|
7
|
+
|
|
8
|
+
require 'rspec/core/rake_task'
|
|
9
|
+
|
|
10
|
+
RSpec::Core::RakeTask.new
|
|
11
|
+
|
|
12
|
+
namespace :spec do
|
|
13
|
+
desc 'Run unit specs only'
|
|
14
|
+
RSpec::Core::RakeTask.new(:unit) do |task|
|
|
15
|
+
task.pattern = 'spec'
|
|
16
|
+
task.rspec_opts = '--tag "~live"'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
desc 'Run acceptance specs only'
|
|
20
|
+
RSpec::Core::RakeTask.new(:acceptance) do |task|
|
|
21
|
+
task.pattern = 'spec'
|
|
22
|
+
task.rspec_opts = '--tag "live"'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
task :default => :spec
|
data/bin/console
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "bundler/setup"
|
|
5
|
+
require "thinking_sphinx"
|
|
6
|
+
|
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
9
|
+
|
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
11
|
+
# require "pry"
|
|
12
|
+
# Pry.start
|
|
13
|
+
|
|
14
|
+
require "irb"
|
|
15
|
+
IRB.start(__FILE__)
|
data/bin/loadsphinx
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
version=$1
|
|
4
|
+
engine=$2
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
load_sphinx () {
|
|
9
|
+
distro="xenial"
|
|
10
|
+
|
|
11
|
+
case $version in
|
|
12
|
+
2.1.9)
|
|
13
|
+
url="http://sphinxsearch.com/files/sphinxsearch_2.1.9-release-0ubuntu11~trusty_amd64.deb"
|
|
14
|
+
format="deb"
|
|
15
|
+
distro="trusty";;
|
|
16
|
+
2.2.11)
|
|
17
|
+
url="http://sphinxsearch.com/files/sphinxsearch_2.2.11-release-1~jessie_amd64.deb"
|
|
18
|
+
format="deb"
|
|
19
|
+
distro="trusty";;
|
|
20
|
+
3.0.3)
|
|
21
|
+
url="http://sphinxsearch.com/files/sphinx-3.0.3-facc3fb-linux-amd64.tar.gz"
|
|
22
|
+
format="gz";;
|
|
23
|
+
3.1.1)
|
|
24
|
+
url="http://sphinxsearch.com/files/sphinx-3.1.1-612d99f-linux-amd64.tar.gz"
|
|
25
|
+
format="gz";;
|
|
26
|
+
3.2.1)
|
|
27
|
+
url="http://sphinxsearch.com/files/sphinx-3.2.1-f152e0b-linux-amd64.tar.gz"
|
|
28
|
+
format="gz";;
|
|
29
|
+
3.3.1)
|
|
30
|
+
url="http://sphinxsearch.com/files/sphinx-3.3.1-b72d67b-linux-amd64.tar.gz"
|
|
31
|
+
format="gz";;
|
|
32
|
+
3.4.1)
|
|
33
|
+
url="http://sphinxsearch.com/files/sphinx-3.4.1-efbcc65-linux-amd64.tar.gz"
|
|
34
|
+
format="gz";;
|
|
35
|
+
*)
|
|
36
|
+
echo "No Sphinx version $version available"
|
|
37
|
+
exit 1;;
|
|
38
|
+
esac
|
|
39
|
+
|
|
40
|
+
if [ "$distro" == "trusty" ]; then
|
|
41
|
+
curl --location http://launchpadlibrarian.net/247512886/libmysqlclient18_5.6.28-1ubuntu3_amd64.deb -o libmysql.deb
|
|
42
|
+
sudo apt-get install ./libmysql.deb
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
if [ "$format" == "deb" ]; then
|
|
46
|
+
curl --location $url -o sphinx.deb
|
|
47
|
+
sudo apt-get install libodbc1
|
|
48
|
+
sudo dpkg -i ./sphinx.deb
|
|
49
|
+
sudo apt-get install -f
|
|
50
|
+
else
|
|
51
|
+
curl $url -o sphinx.tar.gz
|
|
52
|
+
tar -zxvf sphinx.tar.gz
|
|
53
|
+
sudo mv sphinx-$version/bin/* /usr/local/bin/.
|
|
54
|
+
fi
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
load_manticore () {
|
|
58
|
+
url="https://github.com/manticoresoftware/manticore/releases/download/$version/manticore_$version.deb"
|
|
59
|
+
|
|
60
|
+
case $version in
|
|
61
|
+
2.6.4)
|
|
62
|
+
url="https://github.com/manticoresoftware/manticoresearch/releases/download/2.6.4/manticore_2.6.4-180503-37308c3-release-stemmer.xenial_amd64-bin.deb";;
|
|
63
|
+
2.7.5)
|
|
64
|
+
url="https://github.com/manticoresoftware/manticoresearch/releases/download/2.7.5/manticore_2.7.5-181204-4a31c54-release-stemmer.xenial_amd64-bin.deb";;
|
|
65
|
+
2.8.2)
|
|
66
|
+
url="https://github.com/manticoresoftware/manticoresearch/releases/download/2.8.2/manticore_2.8.2-190402-4e81114d-release-stemmer.stretch_amd64-bin.deb";;
|
|
67
|
+
3.4.2)
|
|
68
|
+
url="https://github.com/manticoresoftware/manticoresearch/releases/download/3.4.2/manticore_3.4.2-200410-6903305-release.xenial_amd64-bin.deb";;
|
|
69
|
+
3.5.4)
|
|
70
|
+
url="https://repo.manticoresearch.com/repository/manticoresearch_focal/dists/focal/main/binary-amd64/manticore_3.5.4-210107-f70faec5_amd64.deb";;
|
|
71
|
+
4.0.2)
|
|
72
|
+
url="https://repo.manticoresearch.com/repository/manticoresearch_focal/dists/focal/main/binary-amd64/manticore_4.0.2-210921-af497f245_amd64.deb";;
|
|
73
|
+
4.2.0)
|
|
74
|
+
url="https://repo.manticoresearch.com/repository/manticoresearch_focal/dists/focal/main/binary-amd64/manticore_4.2.0-211223-15e927b28_amd64.deb";;
|
|
75
|
+
6.0.0)
|
|
76
|
+
url="skipped";;
|
|
77
|
+
*)
|
|
78
|
+
echo "No Manticore version $version available"
|
|
79
|
+
exit 1;;
|
|
80
|
+
esac
|
|
81
|
+
|
|
82
|
+
if [ "$version" == "6.0.0" ]; then
|
|
83
|
+
curl --location https://repo.manticoresearch.com/manticore-repo.noarch.deb -o repo.deb
|
|
84
|
+
sudo dpkg -i repo.deb
|
|
85
|
+
sudo apt update
|
|
86
|
+
sudo apt install manticore
|
|
87
|
+
else
|
|
88
|
+
sudo apt-get install default-libmysqlclient-dev
|
|
89
|
+
curl --location $url -o manticore.deb
|
|
90
|
+
sudo dpkg -i ./manticore.deb
|
|
91
|
+
sudo apt-get install -f
|
|
92
|
+
fi
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if [ "$engine" == "sphinx" ]; then
|
|
96
|
+
load_sphinx
|
|
97
|
+
else
|
|
98
|
+
load_manticore
|
|
99
|
+
fi
|
data/bin/testmatrix
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
6
|
+
RUBIES = %w[ 3.0 3.1 3.2 3.3 3.4 4.0 ]
|
|
7
|
+
DATABASES = %w[ mysql2 postgresql ]
|
|
8
|
+
SPHINX_ENGINES = {
|
|
9
|
+
"sphinx" => %w[ 2.2.11 3.4.1 ],
|
|
10
|
+
"manticore" => %w[ 4.0.2 6.0.0 ]
|
|
11
|
+
}.freeze
|
|
12
|
+
RAILS_VERSIONS = [
|
|
13
|
+
{ version: '6_1', min_ruby: 2.7, max_ruby: 3.3 },
|
|
14
|
+
{ version: '7_0', min_ruby: 2.7, max_ruby: 4.0 },
|
|
15
|
+
{ version: '7_1', min_ruby: 2.7, max_ruby: 4.0 },
|
|
16
|
+
{ version: '7_2', min_ruby: 3.1, max_ruby: 4.0 },
|
|
17
|
+
{ version: '8_0', min_ruby: 3.2, max_ruby: 4.0 },
|
|
18
|
+
{ version: '8_1', min_ruby: 3.2, max_ruby: 4.0 },
|
|
19
|
+
].freeze
|
|
20
|
+
|
|
21
|
+
# Returns an array of hashes, with each hash being a valid testable
|
|
22
|
+
# combination:
|
|
23
|
+
output = []
|
|
24
|
+
|
|
25
|
+
RUBIES.each do |ruby|
|
|
26
|
+
DATABASES.each do |database|
|
|
27
|
+
SPHINX_ENGINES.each do |sphinx_engine, sphinx_versions|
|
|
28
|
+
sphinx_versions.each do |sphinx_version|
|
|
29
|
+
# Sphinx 3.4.1 doesn't play nicely with Postgres.
|
|
30
|
+
next if database == 'postgresql' && sphinx_engine == 'sphinx' && sphinx_version == '3.4.1'
|
|
31
|
+
|
|
32
|
+
RAILS_VERSIONS.each do |rails|
|
|
33
|
+
next unless ruby.to_f >= rails[:min_ruby] && ruby.to_f <= rails[:max_ruby]
|
|
34
|
+
|
|
35
|
+
output << {
|
|
36
|
+
ruby: ruby,
|
|
37
|
+
rails: rails[:version],
|
|
38
|
+
database: database,
|
|
39
|
+
sphinx_engine: sphinx_engine,
|
|
40
|
+
sphinx_version: sphinx_version
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
puts JSON.generate(output.compact)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class ThinkingSphinx::ActiveRecord::Association
|
|
4
|
+
def initialize(column)
|
|
5
|
+
@column = column
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def stack
|
|
9
|
+
@column.__stack + [@column.__name]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def string?
|
|
13
|
+
@column.is_a?(String)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_s
|
|
17
|
+
@column.to_s
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class ThinkingSphinx::ActiveRecord::AssociationProxy::AttributeFinder
|
|
4
|
+
def initialize(association)
|
|
5
|
+
@association = association
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def attribute
|
|
9
|
+
attributes.detect { |attribute|
|
|
10
|
+
ThinkingSphinx::ActiveRecord::AssociationProxy::AttributeMatcher.new(
|
|
11
|
+
attribute, foreign_key
|
|
12
|
+
).matches?
|
|
13
|
+
} or raise "Missing Attribute for Foreign Key #{foreign_key}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def attributes
|
|
19
|
+
indices.collect(&:attributes).flatten
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def configuration
|
|
23
|
+
ThinkingSphinx::Configuration.instance
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def foreign_key
|
|
27
|
+
@foreign_key ||= reflection_target.foreign_key
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def indices
|
|
31
|
+
@indices ||= begin
|
|
32
|
+
configuration.preload_indices
|
|
33
|
+
configuration.indices_for_references(
|
|
34
|
+
*configuration.index_set_class.reference_name(@association.klass)
|
|
35
|
+
).reject &:distributed?
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def reflection_target
|
|
40
|
+
target = @association.reflection
|
|
41
|
+
target = target.through_reflection if target.through_reflection
|
|
42
|
+
target
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class ThinkingSphinx::ActiveRecord::AssociationProxy::AttributeMatcher
|
|
4
|
+
def initialize(attribute, foreign_key)
|
|
5
|
+
@attribute, @foreign_key = attribute, foreign_key.to_s
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def matches?
|
|
9
|
+
return false if many?
|
|
10
|
+
|
|
11
|
+
column_name_matches? || attribute_name_matches? || multi_singular_match?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
attr_reader :attribute, :foreign_key
|
|
17
|
+
|
|
18
|
+
delegate :name, :multi?, :to => :attribute
|
|
19
|
+
|
|
20
|
+
def attribute_name_matches?
|
|
21
|
+
name == foreign_key
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def column_name_matches?
|
|
25
|
+
column.__name.to_s == foreign_key
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def column
|
|
29
|
+
attribute.respond_to?(:columns) ? attribute.columns.first :
|
|
30
|
+
attribute.column
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def many?
|
|
34
|
+
attribute.respond_to?(:columns) && attribute.columns.many?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def multi_singular_match?
|
|
38
|
+
multi? && name.singularize == foreign_key
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ThinkingSphinx::ActiveRecord::AssociationProxy
|
|
4
|
+
def search(query = nil, options = {})
|
|
5
|
+
perform_search super(*normalise_search_arguments(query, options))
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def search_for_ids(query = nil, options = {})
|
|
9
|
+
perform_search super(*normalise_search_arguments(query, options))
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def normalise_search_arguments(query, options)
|
|
15
|
+
query, options = nil, query if query.is_a?(Hash)
|
|
16
|
+
options[:ignore_scopes] = true
|
|
17
|
+
|
|
18
|
+
[query, options]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def perform_search(searcher)
|
|
22
|
+
ThinkingSphinx::Search::Merger.new(searcher).merge! nil,
|
|
23
|
+
:with => association_filter
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def association_filter
|
|
27
|
+
attribute = AttributeFinder.new(proxy_association).attribute
|
|
28
|
+
|
|
29
|
+
{attribute.name.to_sym => proxy_association.owner.id}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
require 'thinking_sphinx/active_record/association_proxy/attribute_finder'
|
|
34
|
+
require 'thinking_sphinx/active_record/association_proxy/attribute_matcher'
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class ThinkingSphinx::ActiveRecord::Attribute::SphinxPresenter
|
|
4
|
+
SPHINX_TYPES = {
|
|
5
|
+
:integer => :uint,
|
|
6
|
+
:boolean => :bool,
|
|
7
|
+
:timestamp => :uint,
|
|
8
|
+
:float => :float,
|
|
9
|
+
:string => :string,
|
|
10
|
+
:bigint => :bigint,
|
|
11
|
+
:ordinal => :str2ordinal,
|
|
12
|
+
:wordcount => :str2wordcount,
|
|
13
|
+
:json => :json
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
def initialize(attribute, source)
|
|
17
|
+
@attribute, @source = attribute, source
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def collection_type
|
|
21
|
+
@attribute.multi? ? :multi : sphinx_type
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def declaration
|
|
25
|
+
if @attribute.multi?
|
|
26
|
+
multi_declaration
|
|
27
|
+
else
|
|
28
|
+
@attribute.name
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def sphinx_type
|
|
33
|
+
SPHINX_TYPES[@attribute.type]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def multi_declaration
|
|
39
|
+
case @attribute.source_type
|
|
40
|
+
when :query, :ranged_query
|
|
41
|
+
query
|
|
42
|
+
else
|
|
43
|
+
"#{sphinx_type} #{@attribute.name} from field"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def query
|
|
48
|
+
ThinkingSphinx::ActiveRecord::PropertyQuery.new(
|
|
49
|
+
@attribute, @source, sphinx_type
|
|
50
|
+
).to_s
|
|
51
|
+
end
|
|
52
|
+
end
|