【问题标题】:Algolia Facet sorting numericallyAlgolia Facet 数字排序
【发布时间】:2016-08-23 23:48:51
【问题描述】:

我正在使用 algoliasearch 和 algoliasearchHelper 库来构建即时搜索界面,使用 algolia 网站上的 hogan 模板示例。

我在对数字方面进行排序时遇到问题。我正在使用通过 composer 安装的 algoliasearch-client-php 填充索引。我将一个整数传递给索引对象,如下所示:

"cost_to_build"  => (int) $project->data['approximate_cost'],

但在索引中,我得到的是这样的:

cost_to_build: "15.00"

然后产生一个方面的顺序,如:

15、25、3、5、6。

即使是{sortBy: ['name:asc']}。如果我手动将所有索引值从字符串更改为整数(太多而无法真正手动执行,而且我们会定期更新它),排序将按需要进行。

有人有什么建议吗?

谢谢!

【问题讨论】:

  • 经过检查:$index->addObject(['test' => 18]); 实际上是在索引中添加了一个整数。你确定数据没有在之后重新处理吗?看起来您的值随后被转换为浮点数,然后是字符串。

标签: algolia


【解决方案1】:

值从整数转换为字符串的事实本身确实令人惊讶,我不知道为什么会发生这种情况。

但是,在不解决根本原因的情况下,仍有一个简单的解决方案。 sortBy 参数是 also able to accept a comparison function,因此您可以在前端而不是后端将这些值转换为整数。

按照这些思路应该可以工作:

helper.on('results', function(content){
  //get values  ordered only by count ascending using a function
  content.getFacetValues('cost_to_build', {
    sortBy: function(a, b) {
      return parseInt(a.name, 10) - parseInt(b.name, 10);
    }
  });
});

【讨论】:

  • 谢谢!我们正在测试,确认后会尽快接受您的回答。
  • 工作愉快。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
相关资源
最近更新 更多