Заставить запрос соответствовать более чем одному атрибуту

У меня есть индекс, который включает следующие атрибуты: имя, адрес, город, штат, почтовый индекс.

Я хочу выполнить allOptional поиск, но не хочу, чтобы город, штат или почтовый индекс совпадали без совпадения имени или адреса. Таким образом, поисковый запрос McDonalds будет соответствовать всем McDonalds в каждом городе / штате, McDonalds Chicago вернет все McDonalds в Чикаго, а McDonalds 60007 вернет все McDonalds с почтовым индексом 60007.

Но поисковый запрос Chicago или Chicago IL вернет 0 результатов.

Я читал документацию по фильтрам и фасетам, и я думаю, что это должно быть возможно с фильтром, но я не могу понять, как это сделать.


person Craig Harshbarger    schedule 06.09.2017    source источник


Ответы (1)


Вы можете решить эту проблему путем постобработки результатов после их получения перед их визуализацией.

Вы можете использовать данные _highlightResult в ответе на обращения, чтобы отфильтровать обращения, в которых запрос не соответствует определенным атрибутам.

Например, чтобы удалить совпадения, в которых запрос не соответствует ни в атрибуте name, ни в address:

var displayedResults = response.hits.filter(hit => {
    return hit._highlightResult.name.matchLevel !== 'none' || hit._highlightResult.address.matchLevel !== 'none';
});
person alexandremeunier    schedule 07.09.2017
comment
хммм, не думал об этом. Разве это не уменьшит количество возвращаемых результатов? Полагаю, я мог бы попросить больше, чем я на самом деле хочу, а затем отфильтровать результаты. - person Craig Harshbarger; 07.09.2017
comment
вы правы, это приведет к неточному подсчету результатов, поэтому в зависимости от вашего варианта использования это может быть неприемлемо - person alexandremeunier; 11.09.2017