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 に答える