Почему в представлении на основе индекса search api нельзя фильтровать по не-целым числам?

Главные вкладки

Аватар пользователя VasyOK VasyOK 2 декабря 2023 в 21:15

Приветствую специалистов!
search api кто-то пользуется?

В поисковом индексе есть десятичное (decimal) поле:

Вьюха показывает, что все значения индексируются:



По некоторым значениям можно делать фильтр:

Но чаще (почти всегда) нельзя Sad

Почему?

Комментарии

Аватар пользователя gun_dose gun_dose 3 декабря 2023 в 9:47

Проверь, как значения записаны в базу. Может быть там есть ещё знаки после запятой, а выводится только два?

Аватар пользователя VasyOK VasyOK 3 декабря 2023 в 14:36

БД имеете Collation utf8mb4_unicode_ci:


Все таблицы кроме одной utf8mb3_general_ci:


Стуруктура таблицы search_api_db_products_field_price:

И ее данные:

Что-то неправильно?

Аватар пользователя marassa marassa 3 декабря 2023 в 15:19

По идее не должно поле decimal храниться в базе как float. Само исходное поле (не в индексе, а в типе материала) точно decimal?

Аватар пользователя marassa marassa 5 декабря 2023 в 18:55

Провёл эксперимент: создал поле DECIMAL, в базе оно DECIMAL. Включил его в индекс как DECIMAL - в базе оно FLOAT. Похоже на какую-то особенность/глюк Search API.
Можно полюбопытствовать какая бизнес-задача решается выборкой из базы по равенству цены заданному значению до копейки? В зависимости от того, что и зачем мы делаем, можно будет думать над обходными вариантами. Как вариант можно добавить поле цены в индекс как STRING. Тогда выборка по равенству должна заработать, НО скорее всего не будет корректно работать выборка по больше/меньше...

Аватар пользователя VasyOK VasyOK 5 декабря 2023 в 19:18

У меня вообще не доллары и копейки. В смысле не деньги. Я так образно тестовый сайт собрал с полем "цена", чтоб всем понятно было. Данная проблема она типа корневая. На ней уже строятся проблемы фасетов. На наскольких сайтах проверил - везде эта лажа.

Аватар пользователя marassa marassa 5 декабря 2023 в 19:22

VasyOK wrote: У меня вообще не доллары и копейки. В смысле не деньги.

Так вот надо понять что это IRL, тогда будет ясно как решать.

VasyOK wrote: Я так образно тестовый сайт собрал с полем "цена", чтоб всем понятно было.

Ничего не понятно. Понятно только что числа с плавающей точкой нельзя сравнивать на равенство, но это и без тестового сайта ясно.

Аватар пользователя VasyOK VasyOK 5 декабря 2023 в 19:26

И что за много лет существования search_api никого не волновало, что нельзя работать с такими числами?