2016-07-06 18 views
2

私は自分のサイトに含まれている検索スクリプトで結果を制限することを試みてきました。ここでジキルで検索結果を絞り込む検索

は元のスクリプトです:

jQuery(function() { 
 
    // Initialize lunr with the fields to be searched, plus the boost. 
 
    window.idx = lunr(function() { 
 
    this.field('id'); 
 
    this.field('title'); 
 
    this.field('content', { boost: 10 }); 
 
    this.field('categories'); 
 
    }); 
 

 
    // Get the generated search_data.json file so lunr.js can search it locally. 
 
    window.data = $.getJSON('/search.json'); 
 

 
    // Wait for the data to load and add it to lunr 
 
    window.data.then(function(loaded_data){ 
 
    $.each(loaded_data, function(index, value){ 
 
     window.idx.add(
 
     $.extend({ "id": index }, value) 
 
    ); 
 
    }); 
 
    }); 
 

 
    // Event when the form is submitted 
 
    $("#site_search").submit(function(event){ 
 
     event.preventDefault(); 
 
     var query = $("#search_box").val(); // Get the value for the text field 
 
     var results = window.idx.search(query); // Get lunr to perform a search 
 
     display_search_results(results); // Hand the results off to be displayed 
 
    }); 
 

 
    function display_search_results(results) { 
 
    var $search_results = $("#search_results"); 
 

 
    // Wait for data to load 
 
    window.data.then(function(loaded_data) { 
 

 
     // Are there any results? 
 
     if (results.length) { 
 
     $search_results.empty(); // Clear any old results 
 

 
     // Iterate over the results 
 
     results.forEach(function(result) { 
 
      var item = loaded_data[result.ref]; 
 

 
      // Build a snippet of HTML for this result 
 
      var appendString = '<li><a href="' + item.url + '">' + item.title + '</a></li>'; 
 

 
      // Add the snippet to the collection of results. 
 
      $search_results.append(appendString); 
 
     }); 
 
     } else { 
 
     // If there are no results, let the user know. 
 
     $search_results.html('<li><b><u>NO RESULTS FOUND</u></b></li>'); 
 
     } 
 
    }); 
 
    } 
 
});

そして、私は結果を反復処理する場合、この制限文を含めることが、成功せずにしようとしました:

 // Iterate over the results 
    for (var i = 0; i < results.length && i < 5; i++) { 
     var item = loaded_date[results[i]]; 

私は」それはかなりの時間それの周りに耳を傾けて、何が悪いかを見つけるように見えることができません。

ご協力いただきまして誠にありがとうございます。

-d

答えて

0

あなたのループはうまく見えます。

もう1つの方法は、反復する結果の数を制限するためにArray#sliceを使用することです。

results.slice(0, 5).forEach(function (result) { 
    // snip 
}) 

results.forEachの結果に既存の反復を置き換えます。

結果が5件未満であっても機能し、結果が5件以上ある場合は最初の5件を取ります。

+0

Caioさん、ありがとうございます。上記のコードで、この配列#スライススニペットはどこに置くべきですか? – drugstoreblonde

+0

また、私が得たエラーは、検索が実行されたときに結果がまったく表示されず、単に404ページにリダイレクトされるということでした。 – drugstoreblonde

+0

私はスライスするための呼び出しをどこで使うべきかを説明しようと私の答えを更新しました。 –

関連する問題