代码之家  ›  专栏  ›  技术社区  ›  Anders

Rails 5,思考狮身人面像,索引和搜索通过关系实现meny

  •  0
  • Anders  · 技术社区  · 7 年前

    我有一个Rails应用程序,我想使用Thinking Sphinx进行搜索。我认为以下模型之间有很多关系, Product 有很多 Type s到 ProductType .

    # 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 ID。

    我的相关索引目前看起来是这样的(注意,我很久没有使用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 link_to ,例如(如果有更好的方法,请告诉我):

    = link_to "Web shop", products_path(product_types: Type.all.map(&:id), brand: Brand.all.map(&:id)), class: "nav-link"
    

    在我的 产品控制器 我尝试根据给定的 ID如下:

    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
    

    关于如何为这种情况正确设置索引(和查询)有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   pat    7 年前

    这里有几个问题需要注意:

    首先,您在过程中看到的错误 rake ts:rebuild 指出您没有在ProductType Sphinx索引中设置任何字段-没有 indexes 调用要搜索的文本数据。你真的在搜索ProductType吗?如果是这样,你希望人们通过什么文本进行匹配?

    如果您不在该模型上搜索,则不需要为其设置狮身人面像索引。

    其次,你的搜索问题——你正在过滤 product_types 使用整数,这很有意义。然而,在索引中,您定义了 产品类型 索引 has 索引 到a 对于产品索引定义中的那一行,运行 ts:rebuild