Фасетный поиск по строковым массивам в json

Здравствуйте! Планирую использовать фасетный поиск, атрибутами являются свойства товара. Свойства динамические, хранятся в виде key-value (idProduct, idAttribute, value).
Достаточное колличество свойств могут имеют мультизначения, но в реальных данных, большинство свойств содержат одно значение. Подскажите оптимальный вариант мэппинга данных на plain-table. Как я понял, аттрибут типа массив строк не поддерживается (sql_attr_multi не может быть строковым), соответственно единственный вариант это мэпить их в sql_attr_json. Атрибутов 500+, товаров 1 млн . Можно ли предположить существенную разницу “стоимости” фасетного поиска по json properties против данных в sql_attr_multi? Т.е. если строковые массивы мэпить в uint, то после поиска потребуется дополнительный запрос в RDB для преобразования uint в строку, соответственно, выбор следующий: один поиск по json (но строковые массивы), либо sql_attr_multi + запрос в RDB(или Redis) для уточнения значений аттрибутов?

аттрибут типа массив строк не поддерживается

Да

единственный вариант это мэпить их в sql_attr_json

Да

Атрибутов 500+, товаров 1 млн . Можно ли предположить существенную разницу “стоимости” фасетного поиска по json properties против данных в sql_attr_multi?

Легче попробовать. 1 млн - это немного, проиндексируется быстро. Реализуйте оба варианта и потестируйте.

если строковые массивы мэпить в uint, то после поиска потребуется дополнительный запрос в RDB для преобразования uint в строку

Можете хранить исходные значения в той же таблице в мантикоре в отдельном stored only поле (чтоб RAM не тратить). Тогда не придётся ходить в RDB или Redis.

1 Like

Спасибо за пояснения.

Можете хранить исходные значения в той же таблице в мантикоре в отдельном stored only поле (чтоб RAM не тратить). Тогда не придётся ходить в RDB или Redis.

Учитывая, “…that you don’t need to list attributes instored_only_fields,since their original values are stored anyway.” хранить исходные значения надо в full text fields. А для stored_only так же есть ограничения “The Manticore table format generally supports up to 256 full-text fields” ? Или колличество можно увеличить настройками?

полнотекстовые поля используются для полнотектового поиска WHERE MAATCH ('') часть - вы не сможете никак увеличить количество этих полей больше чем 256 в одном индексе

stored_only_fields - на самом деле не относятся к полнотекстовым полям, но могут наследовать проверку количества полей от stored_fields, если это так - то скорее всего это баг и если вы убедитесь в этом, то лучше завести тикет на Github и приложить воспроизводимый пример.