Rails 5プロジェクトでThinkingSphinxを使用しようとしています。私は指示を読むhttp://freelancing-gods.com/thinking-sphinx/ThinkingSphinx:SQL支援インデックスのOR条件?
私はOR
のロジックをSQL支援のインデックスに実装する必要があります。ここで
は私のクラスである:
class Message < ApplicationRecord
belongs_to :sender, class_name: 'User', :inverse_of => :messages
belongs_to :recipient, class_name: 'User', :inverse_of => :messages
end
とそのインデクサ:
ThinkingSphinx::Index.define :message, :with => :active_record, :delta => true do
indexes text
indexes sender.email, :as => :sender_email, :sortable => true
indexes recipient.email, :as => :recipient_email, :sortable => true
has sender_id, created_at, updated_at
has recipient_id
end
がschema.rb:
create_table "messages", force: :cascade do |t|
t.integer "sender_id"
t.integer "recipient_id"
t.text "text"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "read", default: false
t.boolean "spam", default: false
t.boolean "delta", default: true, null: false
t.index ["recipient_id"], name: "index_messages_on_recipient_id", using: :btree
t.index ["sender_id"], name: "index_messages_on_sender_id", using: :btree
end
だから私はで2つのインデックス内のみ検索する必要があります一度 - :sender_email
と:recipient_email
- しかし無視するg indexes text
。
Message.search '[email protected]' :conditions => {:sender_email => '[email protected]' OR :receiver_email => '[email protected]'}
意味:擬似コードで
が、私はこのような何か必要な「[email protected]」と「[email protected]」の間のすべてのメッセージを見つけることを(それらのそれぞれは、可能性のいずれか送信者または受信者) - 単語「[email protected]」または「[email protected]」を含むテキストを含むメッセージを無視する。
残念ながら、ドキュメントは言う:つまり
The :conditions option must be a hash, with each key a field and each value a string.
を、私は(実行時に)条件付きのインデックスセットを必要とする - しかし、同時に2つの指標(文書化されていない1として)を超えます。
つまり、ハッシュのみを条件として許可し、文字列(ActiveRecordクエリはhttp://guides.rubyonrails.org/active_record_querying.html#pure-string-conditionsを許可するなど)を許可しないことをお勧めします。
PS ThinkingSphinxのドキュメントhttp://freelancing-gods.com/thinking-sphinx/は非常に悪いものであり、完全に最初から書き直す必要があります。私はそれをすべて読んで何も理解しなかった。これには例はありません(完全な例 - 部分的なものなので完全に不明です)。私はフィールドと属性が何であるか、そしてそれらがどのように異なっているのかを理解していない。団体、条件などはすべて不明です。ひどい。宝石自体はかなりよく見えますが、そのドキュメントはひどいです。