RailsアプリケーションのThinkingSphinxに深刻な問題があります。私のアプリの仕様は次のとおりです。
- Rails 3.2.6
- Ruby 1.9.3
- Sphinx 2.0.4(r3135)
- Thinking Sphinx 2.0.12
私のアプリケーションでは、Page
モデルとOffer
モデルpages
があり、多くありoffers
ます。モデルで定義されたインデックスはPage
次のようになります。
define_index do
#other indexes defined here
#...
has offers.width, as: :offers_width
has offers.height, as: :offers_height
has offers.price, as: :offers_price
set_property delta: true
end
次に、検索クエリと条件に基づいて選択されたPage
モデルで検索を実行します。pages
ただし、フィルターを使用しようとすると:with
、Sphinxから間違った結果が返されました。
たとえばprice
、またはの1つのフィルターのみを使用するwidth
と、結果はOKですが、のようにフィルターを組み合わせようとすると、 ANDではなく指定されたORprice and width
を持つオファーを含む結果が得られます。price
width
price
width
範囲で検索しているとき、ほとんどの時間:with
パラメーターは単なる整数値ではなく範囲です。
以下を使用して1つのクエリを 編集します。
Page.search Riddle.escape(query), conditions: conditions, with: has_cond, star: true, per_page: Page.per_page, page: page
ここで、has_condは次のとおりです。
{:offers_height=>[175..200], :offers_width=>[175..200], :offers_price=>[10..80]}
それでも、すべてのオファーがその範囲の高さを持っているか、すべてのオファーがその範囲の幅を持っているか、価格と同じものであるページが表示されます。