Применяйте фильтрацию с массивом значений вместо одного значения для фильтра в Algolia - PullRequest
0 голосов
/ 29 мая 2020

У меня есть в моем индексе список объектов, каждый из которых имеет значение objectID.

При некотором поиске я хочу отфильтровать определенное их количество, используя там objectID.

На данный момент он работает с одним значением в виде строки, я хотел бы знать, как это сделать для нескольких значений.

filters = 'NOT objectID:' + objectIDToFilter;

Эта работа для одного объекта, что я могу сделать, чтобы применить это для массив ObjectID. потому что:

filters = 'NOT objectID:' + arrayObjectID;

не работает.

Я думал о создании огромной строки с arrayId.map со всеми моими 'NOT objectID: 1 AND NOT objectID: 2 ... 'но я хотел знать, есть ли более чистый способ сделать это.

К сожалению, я неправильно понял строку в algolia do c:

Array Атрибуты: Любой атрибут, настроенный как массив, будет соответствовать фильтру, как только одно из значений в массиве совпадет.

Очевидно, это относится к самому значению в Algolia, а не к фильтру

1 Ответ

0 голосов
/ 29 мая 2020

Итак, я не нашел решения на algolia do c, я выбрал длинную строку, надеюсь, что нет ограничений на то, сколько фильтров мы можем добавить к запросу (ничего об этом не нашел). 1002 * Вот что я сделал, если кому-то это нужно:

let filters = `NOT objectID:${userID}`; 
blockedByUsers.map((blockedByUser) => {
   filters = filters + ` AND NOT objectID:${blockedByUser}`;
});

Если вам нужно добавить несколько, но у вас нет начальной точки, как у меня, вы не можете начать запрос с AND, решение, которое я нашел, чтобы обойти это:

let filters = `NOT objectID:${blockedByUsers[0]}`;
blockedByUsers.map((blockedByUser, i) => {
   if (i > 0) filters = filters + ` AND NOT objectID:${blockedByUser}`;
});

Вероятно, есть более чистое решение, но это работает. Если вы нашли другое решение этой проблемы, я буду рад видеть:)

...