現在のレコードのみを検索するsphinx_scopeが必要です。各データベースレコードのフィールドはstatus
で、値はCURRENT
またはARCHIVED
のいずれかです。sphinxスコープの検索で引用符が見つからない
私はこれを達成しましたが、そこに行くためには奇妙な構造を使わなければなりません。おそらくもっと良い方法があります。
は、ここで私が持っているものです。
インデックス/ letter_index.rb
ThinkingSphinx::Index.define :letter, :with => :real_time do
# fields
indexes title, :sortable => true
indexes content
# attributes
has status, :type => :string
has issue_date, :type => :timestamp
has created_at, :type => :timestamp
has updated_at, :type => :timestamp
end
モデル/ letter.rb
class Letter < ActiveRecord::Base
include ThinkingSphinx::Scopes
after_save ThinkingSphinx::RealTime.callback_for(:letter)
.. snip ..
sphinx_scope(:archived) {
{:with => {:status => "'ARCHIVED'"}}
}
私はに走った問題は、私は:with => {:status => 'ARCHIVED'}
を使用した場合ということでした、私のクエリは、
SELECT * FROM `letter_core` WHERE MATCH('search term') AND `status` = ARCHIVED AND `sphinx_deleted` = 0 LIMIT 0, 20
ThinkingSphinx::SyntaxError: sphinxql: syntax error, unexpected IDENT, expecting CONST_INT (or 4 other tokens) near 'ARCHIVED AND `sphinx_deleted` = 0 LIMIT 0, 20; SHOW META'
ですが、:with => {:status => "'ARCHIVED'"}
というように構成すると、一重引用符が追加され、クエリが成功します。 :)
これはスコープを書くための適切な方法ですか、それとも良い方法ですか?
ボーナス質問:私はスコープで許可されているもののためのドキュメントを見つけるか、など:order
、:with
、:conditions
などなど
これで解決します。これをいつgemfileから削除できるのかをどのように知ることができますか? –
さて、開発中に修正されました。しかし、生産は壊れました...スフィンクスは2.0.4でした。私は、スフィンクスのバージョンが違っていたことに気づいていませんでした。 [2.2.11](http://sphinxsearch.com/downloads/release/)に更新 - [127.0.0.1にバインドできませんでした](https://github.com/pat/thinking-sphinx/issues/ 857) - 'sudo service sphinxsearch stop'と' bundle exec rake ts:regenerate'を実行します。うわー、3時間のヘッドバンギングが1つの文に縮まった! –
Riddleのv2.1.0をリリースしました.Gemfileからそのリストを削除し、 'bundle update riddle'を実行すると2.1.0を使用していることを確認する必要があります。そしてあなたが痛みを改善していると聞いて申し訳ありませんが、あなたはそれがすべて理解されたことを知っていることも素晴らしいです! – pat