自动完成算法中的 facetFilters

facetFilters in autocomplete algolia

我在为 algolia-autocomplete 设置 facetFilters 时遇到困难。如果我想根据一些组织进行过滤,例如: source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 5, facetFilters:[ ['organization_id:1', 'organization_id:10'], ['listing_status:Published' ]] }) 它工作得很好。

现在我想从文本框中选取值,但它不起作用。如果文本框的值为

<input type="hidden" id="marketplace_organization_ids" value="'organization_id:1', 'organization_id:10'"> source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 5, facetFilters:[ [$('#marketplace_organization_ids').val()], ['listing_status:Published' ]] }), 也尝试使用数组但没有结果:

var name = ["'organization_id:1'","'organization_id:10'"]; source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 5, facetFilters:[ [name.join(',')], ['listing_status:Published' ]] })

我已经在一个组织中使用了上面的方法,并且效果很好:

source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 5, facetFilters:[ ['organization_id:'+$('#user_organization_id').val() , 'distributors.id:'+$('#user_organization_id').val()] ] }),

感谢任何帮助。

您似乎在 facetFilters 中传递了不正确的值,因为没有解析从您的输入中提取的值。

source: $.fn.autocomplete.sources.hits(index, {
  hitsPerPage: 5,
  facetFilters:[
    [$('#marketplace_organization_ids').val()],
    ['listing_status:Published']
  ]
})

评估为

source: $.fn.autocomplete.sources.hits(index, {
  hitsPerPage: 5,
  facetFilters:[
    ["'organization_id:1', 'organization_id:10'"],
    ['listing_status:Published']
  ]
})

根据 Algolia's documentation about facetFilters,您应该 提供字符串数组而不是数组的字符串表示形式,例如

source: $.fn.autocomplete.sources.hits(index, {
  hitsPerPage: 5,
  facetFilters:[
    ['organization_id:1', 'organization_id:10'], // no more double-quotes
    ['listing_status:Published']
  ]
})

您可以在将值传递给数组之前拆分您的值:

const organizationFilter = $('#marketplace_organization_ids').val()
  .split(',') // split string into array
  .map(filter => filter.trim()) // remove whitespaces

console.log(organizationFilter); // ['organization_id:1', 'organization_id:10']