0

我在我的 rails 4 应用程序上使用带有 searchkick 的 elasticsearch。

我刚刚实现了一个“你的意思是”功能,当查询拼写错误时,它会向用户推荐正确的拼写。

你的意思是

将建议的单词变成可点击的链接,然后搜索该链接的最佳方法是什么?无法找到有关这样做的任何文档。

这是我认为显示“您的意思是”建议的代码:

Did you mean: <strong><%= @articles.try(:suggestions).join' ' %></strong>

这是我在articles_controller中的搜索方法:

@articles = Article.search(params[:q], misspellings: {edit_distance: 2}, suggest: true, fields: ["specific^10", "title", "aka", "category", "tags_name", "nutritiontable"], boost_where: {specific: :exact}, page: params[:page], per_page: 12)

这是我用来搜索我的应用程序的表单:

<div class="searchbar" id="sea">
    <%= form_tag articles_path, method: :get do %>
        <p>
            <%= text_field_tag :q, params[:q], id:"complete", name:"q", style:"width:550px; height:34px;", :autofocus => true, class: "form-control", placeholder:"Search... " %><br>
            <%= submit_tag "Let's Find Out!", :name => nil, class: "btn btn-default btn-lg", style: "margin-right: 10px;" %>
            <%= link_to "Most Popular", articles_path(:most_popular => true), class:"btn btn-default btn-lg" %>
        </p>
    <% end %>
</div>
4

1 回答 1

1

我发布了一些可能对您有所帮助的代码,您需要修复其中的任何问题,但您会知道需要做什么:

<div class="searchbar" id="sea">
    <%= form_tag articles_path, method: :get, id: 'search_form' do %>
        <p>
            <%= text_field_tag :q, params[:q], id:"complete", name:"q", style:"width:550px; height:34px;", :autofocus => true, class: "form-control", placeholder:"Search... " %><br>
            <%= submit_tag "Let's Find Out!", :name => nil, class: "btn btn-default btn-lg", style: "margin-right: 10px;" %>
            <%= link_to "Most Popular", articles_path(:most_popular => true), class:"btn btn-default btn-lg" %>
        </p>
    <% end %>
</div>

我只是在表单中添加了一个 id。

Did you mean: <a id='suggested_word'><strong><%= @articles.try(:suggestions).join' ' %></strong></a>

然后在jquery中:

$("#suggested_word").click(function(){
  var word = $(this).text();
  $("input#complete").val(word);
  $("#search_form").submit();
});

这只是一个粗略的代码,需要大量重构。我所做的是,当任何人单击建议时,应在文本框中输入建议的单词,并使用该单词提交该表单。所以它会用那个词显示新的结果。

现在假设@articles.try(:suggestions)返回多个单词,那么您需要循环它们并为每个单词添加锚标记。

希望这可以帮助。

于 2015-07-20T08:53:04.653 回答