One thing sphinx doesn't do very well is sort strings. In general
when sorting, you need to upper or lowercase the strings in the sphinx
config file. I created a config extension that will do this
automatically that injects itself when a string sort attribute is
added. Does this seem like a reasonable approach?
module ThinkingSphinx
class Index
class Builder
private
def add_sort_attribute(field, options)
add_internal_attribute field, options.merge({:perform_upper =>
true}), "_sort"
end
end
end
class Attribute < ThinkingSphinx::Property
def initialize(source, columns, options = {})
super
@type = options[:type]
@query_source = options[:source]
@crc = options[:crc]
@perform_upper = options[:perform_upper]
@type ||= :multi unless @query_source.nil?
if @type == :string && @crc
@type = is_many? ? :multi : :integer
end
source.attributes << self
end
def to_select_sql
return nil unless include_as_association?
separator = all_ints? || all_datetimes? || @crc ? ',' : ' '
clause = @columns.collect { |column|
part = column_with_prefix(column)
case type
when :string
adapter.convert_nulls(part)
when :datetime
adapter.cast_to_datetime(part)
when :multi
part = adapter.cast_to_datetime(part) if
is_many_datetimes?
part = adapter.convert_nulls(part, '0') if is_many_ints?
part
else
part
end
}.join(', ')
clause = adapter.crc(clause) if @crc
clause = adapter.concatenate(clause, separator) if
concat_ws?
clause = adapter.group_concatenate(clause, separator) if
is_many?
clause = "UPPER(#{clause})" if @perform_upper
"#{clause} AS #{quote_column(unique_name)}"
end
end
end
--
You received this message because you are subscribed to the Google Groups
"Thinking Sphinx" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/thinking-sphinx?hl=en.