0

Thinking_Sphinx に少し問題があります。具体的には:

次の関係を持つレストラン モデルとレビュー モデルがあります。

Restaurant Has_many Reviews through relationships
Review belongs_to Restaurant through relationships

各レビューには、0.5 刻みで 10 進法から外れた評価があります。

Thinking Sphinx でレストランを検索し、次のようにレビュー評価を属性として設定します (結果が評価値の降順になるようにしています)。

has reviews.rating, :as => :review_rating, :type => :float

これは、ターミナルで Thinking Sphinx のインデックスを作成したときに表示されるエラーです。

indexing index 'restaurant_core'...
ERROR: source 'restaurant_core_0': expected attr type ('uint' or 'timestamp' or 'bigint') in sql_attr_multi, got 'float review_rating from field'.
ERROR: index 'restaurant_core': failed to configure some of the sources, will not index.

興味深い話: :type を :integer に変更すると、次のようになります。

has reviews.rating, :as => :review_rating, :type => :integer

エラーは発生しません。

Ruby on Rails 3.2.11、Thinking Sphinx 3.0.1、Ubuntu 12.10 を実行しています。

どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたの問題は、Restaurant多くの s があることですが、単一の値としてReviewインデックスを作成しています。reviews.ratingインデックスを変更して、レビューの集計 (平均、中央値、最高または最低など) を計算するか、複数値属性 (MVA) を使用する必要があります。ただし、MVA は整数、タイムスタンプ、またはブール値のみです。

たとえば、評価の平均を属性値として取得するには、次のようにします。

has "AVG(reviews.rating)", :as => :review_rating, :type => :float

もちろん、正確なコードはテーブル名などによって異なりますsphinx.conf。問題がある場合は、生成されたファイルを確認してください。

于 2013-03-21T11:06:53.620 に答える