facetFilters в автозаполнении Алголии - PullRequest
2 голосов
/ 14 октября 2019

Я столкнулся с трудностями при настройке FacetFilters для algolia-autocomplete. Если я хочу фильтровать по нескольким организациям, таким как: 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()] ] }),

Цените любую помощь.

1 Ответ

1 голос
/ 22 октября 2019

Похоже, что вы передаете неправильное значение в ваш 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 о 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']
...