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

时间:2016-04-20 15:13:52

标签: javascript ranking algolia

我正在使用Algolia instantsearch.js来展示选举的候选人(这里:https://laprimaire.org/candidats/)。我希望候选人的初始显示是随机的,以便每个候选人或多或少都具有相同的可见性。

我在这个答案中读到,它不是Algolia的一个特征,但无论如何应该可以用一点js技巧来做:Is it possible to sort randomly, and to query on field if it exists?

问题是我正在使用instantsearch.js,我找不到如何在instantsearch.js的情况下实现上述searchFunction。

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

然而,它没有找到关于此帮助程序的文档以及如何操作它,以便我可以将随机函数应用于搜索结果。

任何帮助将不胜感激! 非常感谢

Thibauld

1 个答案:

答案 0 :(得分:6)

点击窗口小部件可让您通过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逻辑,可以循环播放每个匹配。