Здравствуйте! Планирую использовать фасетный поиск, атрибутами являются свойства товара. Свойства динамические, хранятся в виде 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.
Спасибо за пояснения.
Можете хранить исходные значения в той же таблице в мантикоре в отдельном 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 и приложить воспроизводимый пример.