轮胎不搜索部分关键字

时间:2014-01-23 11:27:38

标签: ruby-on-rails search elasticsearch tire

如何在轮胎查询中使用通配符。 暂时我在搜索查询中使用*,但它正在增加执行时间。 还有别的办法吗? 我是新手&完全没有使用json方法来配置我的elascticsearch。

这是我的代码。

模型/ movie.rb

class Movie < ActiveRecord::Base

    include Tire::Model::Search
    include Tire::Model::Callbacks
    mapping do
        indexes :title,boost: 10
        indexes :year
        indexes :author
    end
    def self.search(params)
        #binding.pry
        tire.search(load: true) do |s|
            s.query {string "*#{params[:query]}*"} if params[:query].present?
            s.filter :range,year: {lte: 2004}
        end
    end
end

控制器/ search_controller.rb

class SearchController < ApplicationController
  def index
    if(params[:query]).present?
    @results=Movie.search(params)
    else
    @results=[]
    end
  end
end

查看/ index.html.erb

<h1>Search#index</h1>
<p>Find me in app/views/search/index.html.erb</p>


    <%= form_tag search_index_path, method: :get do %>
      <p>
        <%= text_field_tag :query, params[:query] %>
        <%= submit_tag "Search", name: nil %>
      </p>
    <% end %>
    <% if @results %>
    <% @results.each do |fetchresults| %>
    <%= fetchresults.title %> 
    <%= fetchresults.year %>
    <%= fetchresults.author %><br/>
    <% end %>
    <% end %>

例如。我在我的数据库和巴黎有巴黎当我搜索“aris”时,它应该在搜索结果中显示巴黎,默认情况下它没有显示任何结果。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用“ like ”,如下所示:

让我们假设您 movie 表中有一个名为 name 的属性

@ results = Movie.where(“name like?”,“aris”)

相关问题