0

アプリケーションに Thinking Sphinx をセットアップする場合

すべてが正常に機能していました

Thinking Sphinx で条件クエリを実行することを決定するまで

PartPriceRecord.search "50002" ,:conditions => { :supplier_id =>
"supp50002" },:star => true

そして、それは上記のエラーで私を報告しました

ThinkingSphinx::SphinxError: index part_price_record_core: query
error: no field 'supplier_id' found in schema

ライアン・ベイツのスクリーンキャストを見ても、彼は列に定義された「 has 」メソッド で条件句を達成しているようです

何かのようなもの

 has :author_id

Pate Allenの投稿の 1 つを読む(一番下までスクロール)

 :with should be used for attribute filters, and :conditions for
field queries. 

上記のコード句で変更する

PartPriceRecord.search "PartNumber50002",:with => {:supplier_id =>
"supp50002" },:star => true

データベースでpart_number「PartNumber50002」の「supplier_id」のレコードを確認できるため、間違った結果が得られません

今、私は混乱しています

上記のエラーが表示される理由と、「フィールド」と「属性」の根本的な違い

誰か助けてくれませんか

ところで、ここで私のインデックスの定義

 define_index  do
   indexes part_number
   has supplier_id
 end

 sphinx_scope(:supplier) { |name|
   {:conditions => {:supplier_id => supplier}}
 }
4

1 に答える 1

1

Sphinx では、現在、数値属性のみをフィルタリングできます。:supplier_id => "supp50002" は文字列属性を示唆しています。

ルビとか思考スフィンクスがよくわからない。しかし、根底にあるスフィンクスがそれを行うことができないのを見て、私は考えていると思います-スフィンクスはそれを許可しません.

  • フィールドは、元のデータセットからのテキスト列です。Sphinx はそれらにインデックスを付け、メインの「全文クエリ」を介してクエリ可能です。

  • 一方、属性はそのままインデックスに格納されます。それらは、検索[1]、ソート、グループ化、および直接フィルタリングに役立ちます。ただし、文字列属性によるフィルタリングはサポートされていません。他の属性でフィルタリングできます

[1] Sphinx は結果セットで属性の値を返すことができます。一方、フィールドは保存されません-インデックスのみが作成されるため、元に戻すことはできません

于 2012-05-24T13:41:00.610 に答える