【问题标题】:Elasticsearch advanced searchElasticsearch 高级搜索
【发布时间】:2015-06-15 16:48:34
【问题描述】:

我找到了 Elasticsearch gem 并想使用它。例如我有:

app/controller/search_controller.rb中的方法:

def search
  if params[:q].nil?
    @articles = []
  else
    @articles = Article.search params[:q]
  end
end

查看app/views/search/search.html.erb:

<h1>Articles Search</h1>

<%= form_for search_path, method: :get do |f| %>
  <p>
    <%= f.label "Search for" %>
    <%= text_field_tag :q, params[:q] %>
    <%= submit_tag "Go", name: nil %>
  </p>
<% end %>

<ul>
  <% @articles.each do |article| %>
    <li>
      <h3>
        <%= link_to article.title, controller: "articles", action: "show", id: article._id%>
      </h3>
    </li>
  <% end %>
</ul>

并在config/routes.rb搜索路线:

get 'search', to: 'search#search'

我想创建高级搜索。 例如,当我在搜索行中写#cucumber 时,我想得到以下行:localhost:3000/tagged?tag=cucumber。 我有必要按标签显示产品。怎么做?

【问题讨论】:

  • 如果您想将输入 #cucumber 解释为“按标签黄瓜搜索”,则必须手动进行。它与弹性搜索无关。除此之外,您还必须为文章创建弹性搜索索引,设置模型文章回调以更新索引并为您的搜索场景构建查询。另请参阅 elasticsearch-railselasticsearch-model 的文档。

标签: ruby-on-rails ruby search


【解决方案1】:

我更愿意在你的行动中这样做。

tags = params[:q].present? ? params[:q].scan(/#[^ #]+/).collect{|tag| tag.gsub(/#/, '')} : []

现在你可以在搜索功能中使用这个标签数组了

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2018-07-13
    • 2015-04-17
    • 2012-04-09
    • 2015-04-06
    相关资源
    最近更新 更多