2011-10-28 9 views
0

大文字と小文字の混在した列のソートに役立つ「下限」関数の使用についてはthis questionを読んでいます。もう少し複雑な属性を使って同様のことをしたいと思います。インデックス・プロジェクトに、私はTSを使用していSphinxの考え方:列を結合して索引付けし、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 

:まず、私は基本的な多対多の関係持っ

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(...)」機能を実装することができますか?または、私の実際の質問。これをインデックス化するにはどうすればよいですか?人物フィールドでプロジェクトをソートし、大文字と小文字を区別できないようにしますか?

答えて

2

最初の例(SQLスニペットではない通常の列参照)では、trueの代わりに:sortable:insensitiveに設定してみてください。

+0

スーパー。ありがとうございました! – robertwbradford

+0

ありがとう、素晴らしい答え。 ( – Aamir

+0

2つの理由:ドキュメントは完璧ではありませんが(パッチはもちろん歓迎です)、この機能は現在のところTS v3にはありませんv2/v2)なぜ私はカットされていないのか分かりませんが(スフィンクスが文字列属性を正規化する場合は必要ないかもしれませんが)、テストやパッチも歓迎します。 – pat

関連する問題