Мышление Сфинкс: Индексировать объединенные столбцы, а также использовать функцию НИЖЕ? - PullRequest
0 голосов
/ 28 октября 2011

Я прочитал этот вопрос об использовании функции "LOWER" для сортировки столбцов со смешанным регистром.Я хотел бы сделать что-то подобное, но с немного более сложным атрибутом.Во-первых, у меня есть базовое отношение «многие ко многим»:

class Project < ActiveRecord::Base
  has_many :project_people
  has_many :people, :through => :project_people
end

class ProjectPerson < ActiveRecord::Base
  belongs_to :project
  belongs_to :person
end

class Person < ActiveRecord::Base
  has_many :project_people
  has_many :projects, :through => :project_people
end

Я использую TS для индексации проектов:

class Project
  define_index
    indexes name, :sortable => true
    indexes [people.first_name, people.last_name], :as => :person, :sortable => true

    has created_at, category_id

    set_property :delta => true
  end
end

Это прекрасно индексирует, но потом я обнаружил, что у меня есть проблемакогда заглавные и строчные буквы используются в именах людей.Я попытался заменить вызов следующим:

has ["LOWER(people.first_name)", "LOWER(people.middle_name)", "LOWER(people.last_name)"], :as => :person, :type => :string

Но я продолжал получать ошибку при перестроении индекса:

ERROR: index 'project_core': sql_range_query: Unknown column 'people.first_name' in 'field list' (DSN=mysql://...).

Как я могу реализовать функцию "LOWER (...)"?Или мой актуальный вопрос.Как я могу проиндексировать это, чтобы иметь возможность сортировать проекты по полю человека и сделать его без учета регистра?

1 Ответ

2 голосов
/ 29 октября 2011

В первом примере (обычные ссылки на столбцы, а не фрагменты SQL) попробуйте установить :sortable в :insensitive вместо true.

...