2016-07-06 69 views
2

我一直试图没有成功,以限制搜索脚本中包含的结果。在Jekyll搜索中限制搜索结果

这里是原始脚本:

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

我:

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>'); 
 
     } 
 
    }); 
 
    } 
 
});

而且我没有成功遍历结果时试图包含这个声明的限制在相当长的一段时间里,它一直在摆弄它,并且似乎无法找到什么是错误的。

任何帮助,非常感谢。

-d

回答

0

你得到了什么错误,你的for循环看起来不错。

另一种方法是使用Array#slice来限制迭代结果的数量。

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

将您现有的迭代替换为results.forEach的结果。

即使结果少于5个,这也可以工作,并且如果结果超过5个,将使用前5个。

+0

非常感谢您的回应,Caio。我应该在哪里放置这个数组#切片片段在上面的代码中? – drugstoreblonde

+0

另外:我得到的错误是,执行搜索时,结果根本不显示,而是仅重定向到404页面。 – drugstoreblonde

+0

我已经更新了我的答案,尝试解释在哪里使用调用切片。 –