Algolia instantsearch.js : 如何以随机顺序显示结果?

Algolia instantsearch.js : how to display the results with a random order?

我正在使用 Algolia instantsearch.js 来显示参加选举的候选人(此处:https://laprimaire.org/candidats/)。我希望候选人的初始显示是随机的,以便每个候选人或多或少获得相同的知名度。

我在这个答案中读到,它不是 Algolia 的一个特性,但它应该可以通过一些 js 技巧来实现:

问题是我正在使用 instantsearch.js,但我找不到如何在 instantsearch.js.

的情况下实现上述搜索功能

我从文档中看到可以使用 searchFunction 初始化 instantsearch,该 searchFunction 接收一个助手作为参数: https://community.algolia.com/instantsearch.js/documentation/#initialization

但是它没有找到关于这个助手以及如何操作它的文档,所以我可以将随机函数应用于搜索结果。

如有任何帮助,我们将不胜感激! 非常感谢

蒂博

点击小工具可以让您更好地控制如何通过 transformData.allItems and templates.allItems parameters 显示点击列表。

使用本题的shuffle方法How can I shuffle an array?:

function shuffle (o){
  for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
  return o;
}

你可以简单地做:

search.addWidget(
  instantsearch.widgets.hits({
    // Your other options
    transformData: {
      allItems: function (content) {
        return { hits: shuffle(content.hits) };
      }
    },
    templates: {
      empty: 'No results',
      allItems: '{{#hits}}<your previous templates.hit value>{{/hits}}'
    }
  })
);

{{#hits}}{{/hits}} 模板只是一些 Hogan.js 逻辑,用于循环您的每次点击。