2013-08-26: 3.0.5 * [CHANGE] Updating Riddle dependency to be >= 1.5.8. * [FEATURE] Allow scoping of real-time index models. * [CHANGE] Real-time index population presentation and logic are now separated. * [CHANGE] Using the connection pool for update callbacks, excerpts, deletions. * [FIX] Respect existing sql_query_range/sql_query_info settings. * [CHANGE] Don't add the sphinx_internal_class_name unless STI models are indexed. * [FIX] Don't add select clauses or joins to sql_query if they're for query/ranged-query properties. * [CHANGE] Use Mysql2's reconnect option and have it turned on by default. * [FIX] Set database timezones as part of the indexing process. * [CHANGE] Improved auto-starring with escaped characters. * [FIX] Chaining scopes with just options works again. 2013-07-09: 3.0.4 * [CHANGE] Updating Riddle dependency to be >= 1.5.7. * [FEATURE] ts:regenerate rake task for rebuilding Sphinx when realtime indices are involved. * [FEATURE] ts:clear task removes all Sphinx index and binlog files. * [CHANGE] Glaze now responds to respond_to? (@groe). * [FEATURE] Facet search calls now respect the limit option (which otherwise defaults to max_matches) (Demian Ferreiro). * [FEATURE] Excerpts words can be overwritten with the words option (@groe). * [FIX] Empty queries with the star option set to true are handled gracefully. * [CHANGE] Deleted ActiveRecord objects are deleted in realtime indices as well. * [CHANGE] Realtime callbacks are no longer automatically added, but they're now more flexible (for association situations). * [CHANGE] Cleaning and refactoring so Code Climate ranks this as A-level code (Philip Arndt, Shevaun Coker, Garrett Heinlen). * [FIX] Excerpts are now wildcard-friendly. * [FIX] Facet searches now use max_matches value (with a default of 1000) to ensure as many results as possible are returned. * [CHANGE] Exceptions raised when communicating with Sphinx are now mentioned in the logs when queries are retried (instead of STDOUT). * [CHANGE] Excerpts now use just the query and standard conditions, instead of parsing Sphinx's keyword metadata (which had model names in it). * [FIX] The settings cache is now cleared when the configuration singleton is reset (Pedro Cunha). * [FEATURE] The :facets option can be used in facet searches to limit which facets are queried. * [FIX] Escaped @'s in queries are considered part of each word, instead of word separators. * [FIX] Internal class name conditions are ignored with auto-starred queries. * [FEATURE] A separate role can be set for Sphinx actions with Capistrano (Andrey Chernih). * [FIX] RDoc doesn't like constant hierarchies split over multiple lines. * [CHANGE] Get database connection details from ActiveRecord::Base, not each model, as this is where changes are reflected. * [CHANGE] Default Sphinx scopes are applied to new facet searches. * [FEATURE] Facet searches can now be called from Sphinx scopes. 2013-05-07: 3.0.3 * [CHANGE] Updating Riddle dependency to be >= 1.5.6 * [FEATURE] INDEX_ONLY environment flag is passed through when invoked through Capistrano (Demian Ferreiro). * [FEATURE] use_64_bit option returns as cast_to_timestamp instead (Denis Abushaev). * [FIX] Update to association handling for Rails/ActiveRecord 4.0.0.rc1. * [CHANGE] Delta jobs get common classes to allow third-party delta behaviours to leverage Thinking Sphinx. * [FEATURE] Collection of hooks (lambdas) that get called before indexing. Useful for delta libraries. * [FIX] Cast and concatenate multi-column attributes correctly. * [FIX] Don't load fields or attributes when building a real-time index - otherwise the index is translated before it has a chance to be built. * [CHANGE] Raise ThinkingSphinx::MixedScopesError if a search is called through an ActiveRecord scope. * [FIX] Default search panes are cloned for each search. * [FIX] Index-level settings (via set_property) are now applied consistently after global settings (in thinking_sphinx.yml). * [FIX] All string values returned from Sphinx are now properly converted to UTF8. * [CHANGE] GroupEnumeratorsMask is now a default mask, as masks need to be in place before search results are populated/the middleware is called (and previously it was being added within a middleware call). * [FIX] The default search masks are now cloned for each search, instead of referring to the constant (and potentially modifying it often). * [CHANGE] The current_page method is now a part of ThinkingSphinx::Search, as it is used when populating results. 2013-03-23: 3.0.2 * [CHANGE] per_page now accepts an optional paging limit, to match WillPaginate's behaviour. If none is supplied, it just returns the page size. * [FEATURE] Ruby 2.0 support. * [FEATURE] Rails 4.0.0 beta1 support. * [FIX] :utf8? option within index definitions is now supported, and defaults to true if the database configuration's encoding is set to 'utf8'. * [FIX] indices_location and configuration_file values in thinking_sphinx.yml will be applied to the configuration. * [CHANGE] Strings and regular expressions in ThinkingSphinx::Search::Query are now treated as UTF-8. * [FIX] Primary keys that are not 'id' now work correctly. * [CHANGE] Setting a custom framework will rebuild the core configuration around its provided settings (path and environment). * [CHANGE] Search masks don't rely on respond_to?, and so Object/Kernel methods are passed through to the underlying array instead. * [FIX] Search options specified in index definitions and thinking_sphinx.yml are now used in search requests (eg: max_matches, field_weights). * [FEATURE] Indexes defined in app/indices in engines are now loaded (Antonio Tapiador del Dujo). * [FIX] Custom association conditions are no longer presumed to be an array. * [CHANGE] Empty search conditions are now ignored, instead of being appended with no value (Nicholas Klick). * [CHANGE] Custom conditions are no longer added to the sql_query_range value, as they may involve associations. * [FIX] Capistrano tasks use the correct ts rake task prefix (David Celis). * [FEATURE] Query errors are classified as such, instead of getting the base SphinxError. 2013-02-04: 3.0.1 * [FEATURE] Provide Capistrano deployment tasks (David Celis). * [FEATURE] Allow specifying of Sphinx version. Is only useful for Flying Sphinx purposes at this point - has no impact on Riddle or Sphinx. * [FEATURE] Support new JDBC configuration style (when JDBC can be used) (Kyle Stevens). * [FIX] Referring to associations via polymorphic associations in an index definition now works. * [FEATURE] Mysql2::Errors are wrapped as ThinkingSphinx::SphinxErrors, with subclasses of SyntaxError and ParseError used appropriately. Syntax and parse errors do not prompt a retry on a new connection. * [CHANGE] Use connection pool for search queries. If a query fails, it will be retried on a new connection before raising if necessary. * [CHANGE] Glaze always passes methods through to the underlying ActiveRecord::Base object if they don't exist on any of the panes. * [FIX] Don't override foreign keys for polymorphic association replacements. * [FIX] Quote namespaced model names in class field condition. * [FEATURE] Polymorphic associations can be used within index definitions when the appropriate classes are set out. * [FEATURE] Allow custom strings for SQL joins in index definitions. * [FIX] New lines are maintained and escaped in custom source queries. * [FIX] Subclasses of indexed models fire delta callbacks properly. * [FIX] Thinking Sphinx can be loaded via thinking/sphinx, to satisfy Bundler. * [FEATURE] indexer and searchd settings are added to the appropriate objects from config/thinking_sphinx.yml (@ygelfand). * [FIX] New lines are maintained and escaped in sql_query values. 2013-01-02: 3.0.0 * [CHANGE] Updating Riddle dependency to 1.5.4. * [FIX] Respect source options as well as underlying settings via the set_property method in index definitions. * [FIX] Load real-time index definitions when listing fields, attributes, and/or conditions. * [CHANGE] UTF-8 is now the default charset again (as it was in earlier Thinking Sphinx versions). * [FEATURE] Initial realtime index support, including the ts:generate task for building index datasets. Sphinx 2.0.6 is required. * [CHANGE] Removing ts:version rake task. * [FEATURE] SphinxQL connection pooling via the Innertube gem. 2012-12-22: 3.0.0.rc * [FEATURE] Source type support (query and ranged query) for both attributes and fields. Custom SQL strings can be supplied as well. * [FEATURE] Wordcount attributes and fields now supported. * [FEATURE] Support for Sinatra and other non-Rails frameworks. * [FEATURE] A sphinx scope can be defined as the default. * [FEATURE] An index can have multiple sources, by using define_source within the index definition. * [FEATURE] sanitize_sql is available within an index definition. * [FEATURE] Providing :prefixes => true or :infixes => true as an option when declaring a field means just the noted fields have infixes/prefixes applied. * [FEATURE] ThinkingSphinx::Search#query_time returns the time Sphinx took to make the query. * [FEATURE] Namespaced model support. * [FEATURE] Default settings for index definition arguments can be set in config/thinking_sphinx.yml. * [FIX] Correctly escape nulls in inheritance column (Darcy Laycock). * [FIX] Use ThinkingSphinx::Configuration#render_to_file instead of ThinkingSphinx::Configuration#build in test helpers (Darcy Laycock). * [FIX] Suppressing delta output in test helpers now works (Darcy Laycock). * [FEATURE] A custom Riddle/Sphinx controller can be supplied. Useful for Flying Sphinx to have an API layer over Sphinx commands, without needing custom gems for different Thinking Sphinx/Flying Sphinx combinations. 2012-10-06: 3.0.0.pre * First pre-release. Not quite feature complete, but the important stuff is certainly covered. See the README for more the finer details.