简体   繁体   English

使用gem Tire和ElasticSearch建立正确的搜索请求

[英]Building the right search request with gem Tire and ElasticSearch

I am trying to implement simple search request for my Flower Store, but as I am new to Tire and ElasticSearch, I cannot get how to do it. 我正在尝试为我的Flower Store实现简单的搜索请求,但是由于我不熟悉Tyre和ElasticSearch,所以我不知道该怎么做。

I have searchable model Product , and habtm models Category , Colour , Flower . 我有可搜索的模型Product ,以及habtm模型CategoryColourFlower What I want is checkboxes for each association, producing request similiar to this: 我想要的是每个关联的复选框,产生与此类似的请求:

http://example.com/search?q=some%20query&category_names[]=bouquet&category_names[]=marriage&colour_names[]=red&colour_names[]=yellow&colour_names[]=white&flower_names[]=rose&flower_names[]=tulip&price_min=100&price_max=1000

But I need to show only those products, which: 但是我只需要显示那些产品,这些产品:

a) prestent in any of the requested categories (OR);
b) have all of the requested colours (AND);
c) have all of the requested flowers (AND);
d) enter the price range between price_min and price_max.

The q parameter is to search any text, entered to the text field, in the names of associations (let's say, red roses bouquet ), and show it with the upper criteria too. q参数用于搜索在关联名称(例如, red roses bouquet )中输入到文本字段的任何文本,并以较高的条件显示它。

For now I have only 现在我只有

class Product
  include Mongoid::Document

  include Tire::Model::Search
  include Tire::Model::Callbacks

  has_and_belongs_to_many :categories
  has_and_belongs_to_many :colours
  has_and_belongs_to_many :flowers

  def self.search(params)
    tire.search(load: true, page: params[:page], per_page: 8) do |search|
      search.query  { string params[:query] } if params[:query].present?
    end
  end

  def to_indexed_json
    self.to_json(methods: [:category_names, :colour_names])
  end

  def category_names
    self.categories.collect { |c| c.name }
  end

  def colour_names
    self.colours.collect { |c| c.name }
  end
end

and do not know how to configure it. 而且不知道如何配置它。 I read about filters and facets , but because English is not my native I cannot uderstand what is what and how to use them. 我阅读了有关filtersfacets ,但是由于英语不是我的母语,所以我无法理解什么是什么以及如何使用它们。

I did it so: 我是这样做的:

def self.search(params)
  tire.search(load: true, page: params[:page], per_page: 8) do
    query do
      boolean do
        must { string params[:query], default_operator: "AND" } if params[:query].present?
        must { string params[:category_names] } if params[:category_names].present?
        must { string params[:colour_names], default_operator: "AND" } if params[:colour_names].present?
        must { range :price, { gte: params[:price_min], lte: params[:price_max] } } if params[:price_min].present? && params[:price_max].present?
      end
    end

    # raise to_curl
  end
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM