Ruby on rails 如何在Elasticsearch中将关键字更改为数字?
您好,关于Rails Elasticsearch,我在Ruby on rails 如何在Elasticsearch中将关键字更改为数字?,ruby-on-rails,ruby,elasticsearch,searchkick,Ruby On Rails,Ruby,elasticsearch,Searchkick,您好,关于Rails Elasticsearch,我在searchkick gem 错误 Searchkick::InvalidQueryError ([400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Expected numeric type on field [item_final_price], but got [keyword]"}],"type":"search_phase_exec
searchkick gem
错误
Searchkick::InvalidQueryError ([400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Expected numeric type on field [item_final_price], but got [keyword]"}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"items_development_20180507023923980","node":"w7LqCILTTK-gndnoQB1cOQ","reason":{"type":"illegal_argument_exception","reason":"Expected numeric type on field [item_final_price], but got [keyword]"}}]},"status":400}):
基本上告诉我错误是需要数字类型,但类型是关键字
这是我的搜索参数
在controller.rb中
def results
price_ranges = [{to: params[:max_price]}, {from: params[:min_price], to: params[:max_price]}, {from: params[:min_price]}]
@results = Item.search(params[:q], aggs: {item_final_price: {ranges: price_ranges}}, page: params[:page], per_page: 10) if params[:q].present?
end
我的观点
<%= form_tag results_path, method: :get, enforce_utf8: false, id: "q_filter" do %>
<section class="widget widget-categories">
<%= hidden_field_tag :q, params[:q] %>
<h3 class="widget-title">Price Range</h3>
<div class="form-group">
<label>Price Between</label>
<%= number_field_tag :min_price, params[:min_price].to_f, class: "form-control form-control-sm", placeholder: "Min Price" %>
</div>
<div class="form-group">
<label>And</label>
<%= number_field_tag :max_price, params[:max_price].to_f, class: "form-control form-control-sm", placeholder: "Max Price" %>
</div>
<%= button_tag(type: "submit", name: nil, class: "btn btn-outline-primary btn-sm btn-block") do %>
Filter Search
<% end %>
</section>
我找到了答案。我所做的是将列数据类型从字符串更改为浮点。
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
Item.import
searchkick callbacks: :async
def search_data
{
item_name: item_name,
item_details: item_details,
item_final_price: item_final_price
}
end