【问题标题】:Tire does not search partial keyword轮胎不搜索部分关键字
【发布时间】:2014-01-23 11:27:38
【问题描述】:

如何在轮胎查询中使用通配符。 暂时我在搜索查询本身中使用 *,但它正在增加其执行时间。 有没有别的办法?? 我是新手,根本不使用 json 方法来配置我的 Elasticsearch。

这是我的代码。

models/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”时,它应该在搜索结果中显示巴黎,默认情况下它不显示任何结果。

谢谢。

【问题讨论】:

    标签: ruby-on-rails search elasticsearch tire


    【解决方案1】:

    你可以使用“like”,如下:

    假设您的 movie 表有一个名为 name 的属性

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

    【讨论】:

    • Hey Soul,我是专门询问轮胎,而不是普通的轨道查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多