Приветствую специалистов!
search api кто-то пользуется?
В поисковом индексе есть десятичное (decimal) поле:
Вьюха показывает, что все значения индексируются:
По некоторым значениям можно делать фильтр:
Но чаще (почти всегда) нельзя
Почему?
Приветствую специалистов!
search api кто-то пользуется?
В поисковом индексе есть десятичное (decimal) поле:
Вьюха показывает, что все значения индексируются:
По некоторым значениям можно делать фильтр:
Но чаще (почти всегда) нельзя
Почему?
Комментарии
Проверь, как значения записаны в базу. Может быть там есть ещё знаки после запятой, а выводится только два?
БД имеете Collation utf8mb4_unicode_ci:
Все таблицы кроме одной utf8mb3_general_ci:
Стуруктура таблицы search_api_db_products_field_price:
И ее данные:
Что-то неправильно?
Выглядит правильно. А если в настройках views поставить галочку "отображать sql запрос", что показывает?
Когда результат показывает, запрос такой:
А когда не показывает, то:
float.
"Every float value is an approximation, that's why equals does not work with that data type"
https://stackoverflow.com/questions/48334679/why-float-type-data-compari...
А что делать то? Это ж даже не по Друпалу на Стековерфлов вопрос.
По идее не должно поле decimal храниться в базе как float. Само исходное поле (не в индексе, а в типе материала) точно decimal?
нууу наверное decimal...
Поля в типе материала:
Настройки поля:
Люди у вас есть сайты на search_api с дробными значениями? Не ужели у вас не так?
Обычно для фильтрации по дробным значениям используют фильтры типа "от/до"
Провёл эксперимент: создал поле DECIMAL, в базе оно DECIMAL. Включил его в индекс как DECIMAL - в базе оно FLOAT. Похоже на какую-то особенность/глюк Search API.
Можно полюбопытствовать какая бизнес-задача решается выборкой из базы по равенству цены заданному значению до копейки? В зависимости от того, что и зачем мы делаем, можно будет думать над обходными вариантами. Как вариант можно добавить поле цены в индекс как STRING. Тогда выборка по равенству должна заработать, НО скорее всего не будет корректно работать выборка по больше/меньше...
У меня вообще не доллары и копейки. В смысле не деньги. Я так образно тестовый сайт собрал с полем "цена", чтоб всем понятно было. Данная проблема она типа корневая. На ней уже строятся проблемы фасетов. На наскольких сайтах проверил - везде эта лажа.
Так вот надо понять что это IRL, тогда будет ясно как решать.
Ничего не понятно. Понятно только что числа с плавающей точкой нельзя сравнивать на равенство, но это и без тестового сайта ясно.
И что за много лет существования search_api никого не волновало, что нельзя работать с такими числами?
Нет. Потому что в реальном мире не существует такой задачи.
Фасетный фильтр по цене, если цена задана с центами. Он исходит из этой задачи.