我有一個Rails應用程序,我想在其中使用思維獅身人面像進行搜索。我有一個有很多雖然關係以下型號,Product
有很多Type
秒通過ProductType
。Rails 5,思維獅身人面像,索引和搜索已通過關係meny
# Product.rb
has_many :product_types
has_many :types, through: :product_types
# Type.rb
has_many :product_types
has_many :products, through: :product_types
# ProductType.rb
belongs_to :product
belongs_to :type
在我ProductsController
索引操作我希望能夠過濾哪些產品的基礎上給出Variant
IDS視圖中顯示。
我的相關指標目前看起來是這樣的(注意,我沒有在很長一段時間使用ThinkingSphinx):
# product_index.rb
ThinkingSphinx::Index.define :product, :with => :active_record do
indexes name, :sortable => true
indexes description
indexes brand.name, as: :brand, sortable: true
indexes product_types.type.id, as: :product_types
has created_at, updated_at
end
# type_index.rb
ThinkingSphinx::Index.define :type, :with => :active_record do
indexes name, :sortable => true
end
# product_type_index.rb
ThinkingSphinx::Index.define :product_type, :with => :active_record do
has product_id, type: :integer
has type_id, type: :integer
end
我目前通過的:product_types
ID的數組在link_to
,像這樣(讓我知道是否有更好的方式來做到這一點):
= link_to "Web shop", products_path(product_types: Type.all.map(&:id), brand: Brand.all.map(&:id)), class: "nav-link"
在我ProductsController
我試圖篩選基於給定Type
IDS這樣的結果:
product_types = params[:product_types]
@products = Product.search with_all: { product_types: product_types.collect(&:to_i) }
當我運行rake ts:rebuild
我得到以下錯誤:
indexing index 'product_type_core'...
ERROR: index 'product_type_core': No fields in schema - will not index
當我試圖查看在瀏覽器中我得到以下錯誤的觀點:
index product_core: no such filter attribute 'product_types'
- SELECT * FROM `product_core` WHERE `sphinx_deleted` = 0 AND
`product_types` = 1 AND `product_types` = 2 AND `product_types` = 3
LIMIT 0, 20; SHOW META
如何任何想法正確設置我的索引(和查詢)爲這種情況?
Thanks @pat!我已經更新了我的索引,如下所示:'有product_types.type.id,如::type_ids'。我在[Github](https://github.com/pat/thinking-sphinx-examples)上找到了你的高級搜索示例,並且我試圖做類似的事情。我的搜索的相關部分如下所示:'@products = Product.search params [:query],with_all:options [:with_all]','options [:with_all]'看起來像這樣:'{:type_ids => [2,3]}。但我總是得到0個結果:'SELECT * FROM'product_core'WHERE'sphinx_deleted'= 0 AND'type_ids'= 2 AND'type_ids'= 3 LIMIT 0,20'。任何想法我失蹤? – Anders
只需確認:您是否期望獲得所有連接到* type id 2和type id 3的產品?(而不是連接到任一個但不一定兩者的產品)。此外,它沒有顯示在你共享的代碼中,但是你是否正在將'params [:product_types]'翻譯成Type實例? – pat
不,我希望所有的產品有1或3型。我已經改變了這一點'params [:product_types]'從我原來的問題。我改成了:'options = {:with_all => {}}','options [:with_all] [:type_ids] = params [:filter] [:type] .keys.map(&:to_i)'(導致'{:type_ids => [2,3]}'和'@products = Product.search params [:query],with_all:options [:with_all]',我可以用更新後的代碼更新我的問題。對你的幫助@pat! – Anders