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を持つオファーを含む結果が得られます。pricewidthpricewidth
範囲で検索しているとき、ほとんどの時間: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]}
それでも、すべてのオファーがその範囲の高さを持っているか、すべてのオファーがその範囲の幅を持っているか、価格と同じものであるページが表示されます。