0
class Product < ActiveRecord::Base
belongs_to :city
has_and_belongs_to_many :categories
before_destroy { categories.clear }
searchkick locations: ["location"]

def search_data
    {
        istatus: i_status,  
        name: name,
        price: price,
        city_id: city_id,
        value: value,
        discount: discount,
        expiry_date: expiry_date,
        created_at: created_at,
        products_sold: products_sold, 
        city: city.name,
        deal_type: deal_type,
        country: city.country.name,
        category_id: categories.map(&:id),
        location: [latitude, longitude]
    }
end

def self.apply_filters(request)
    # @product = Product.search "Tex-Mex", limit:10  #=>this works
    @product = Product.search body: {match: {name: "Tex-Mex"}},limit: 10 #=>does not work, the limit part work
    end
end

body..を使用して高度な検索を使用すると、希望の結果が返されませんが、制限:10の部分では、10の結果のみが返されます

4

3 に答える 3

0

Elasticsearch DSLを使用してクエリを作成する必要があります。具体的には、sizematchを使用します。

Product.search body: { query: { match: {name: "Tex-Mex"} }, size: 10 }

高度な検索を使用する場合、Searchkick はボディ ハッシュの外側のパラメーターを無視します。body ハッシュを使用すると、完全な ES DSL を使用できます。

于 2018-01-22T14:30:42.897 に答える
0

// 条件 = {}

query = Product.search params[:query], execute: false, where : conditions

query.body[:query] =  { match: {name: "Tex-Mex"} }

query.body[:size] = 10

query.execute
于 2016-02-12T05:26:57.077 に答える