Algolia 即时搜索 : custom sort refinementlist

标签 algolia instantsearch.js instantsearch

在我们的项目中,我们有几个细化列表,它们运行正常。但是,它们是默认排序,计算字母数字,正在应用。在我们的情况下,我的每个细化列表项都有一个“等级”属性,但我无法访问它,因为 API 正在控制返回的内容。

根据documentation似乎只有三种排序选择。

有没有办法解决这个问题?

例如,此代码产生以下结果。

search.addWidget(
  instantsearch.widgets.refinementList({
    container: '#outsideDiameter',
    attributeName: 'outsideDiameter.description',
    operator: 'or',
    sortBy: ["name:asc"],
    limit: 5,
    showMore: true,
    templates: {
      header: getHeader('Outside Diameter'),
    },
  })
); 

enter image description here

我希望列表项按小数值升序排序。换句话说:3/16", 1/4", 5/16", ..., 4.5mm, 6.0mm, etc... 每个值都有我之前提到的“等级”属性。

那可能吗?

最佳答案

对于更高级的排序,有几个选项:

  • 使用 renderingContent.facetOrdering 进行手动分面排序参数:https://www.algolia.com/doc/api-reference/api-parameters/renderingContent/

  • index.setSettings({
      renderingContent: {
        facetOrdering: {
          values: {
            size: {
              order: ['1/3"', '1/2"', '17m'],
              sortRemainingBy: 'hidden',
            },
          },
        },
      },
    });
    
  • 将所有单位转换为公制(或其他正确排序的单位)并将其作为前缀添加到您的记录中:

  • {
      "size": "0015mm - 1/2\""
    }
    
    完成此操作后,按字母顺序排序将具有升序。对于显示,您可以使用以下方法删除前导零:
    refinementList({
      transformItems(items) {
        return items.map((item) => ({
          ...item,
          label: item.label.replace(/^0+/, ''),
        }));
      },
    });
    
  • 使用 transformItems 排序

  • 在 transformItems 中,您可以做任何您想做的事情,例如先转换单位,然后按新属性排序:
    refinementList({
      transformItems(items) {
        return items
          .map((item) => ({ ...item, mm: convertToMm(item.label) }))
          .sort((a, b) => b.mm - a.mm);
      },
    });
    

    关于Algolia 即时搜索 : custom sort refinementlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52209832/

    相关文章:

    android - 使用InstantSearch-Android时出现MemoryLeak

    android - 使用 Android 的 Algolia 和 Cloud Firestore?

    javascript - 使用 InstantSearch.js 在运行时选择不同的模板

    algolia - 我可以在 .js 版本的 instantsearch 中的hierarchicalMenu上设置defaultRefinement吗(不 react )

    javascript - Algolia 动态方面选项

    javascript - 如何通过即时搜索 js 从 woocommerce 产品中删除类别

    ios - 如果您有 2 个不同的搜索栏用于 2 个不同的索引,如何配置 Algolia InstantSearch 类?

    javascript - Firebase 函数 : sync with Algolia doesn't work

    php - Laravel 多模型事件

    jquery - Algolia 自动完成 - 如何做出响应