FACET не все строки

Здравствуйте, может кто подскажет, может какие-то лимиты нужно увеличить?
В запросе участвует 112 495
FACET получает не все значения на пример по opcii ‘27675877

Пример:
В индексе 112 495 строк
имеется sql_attr_multi = uint opcii from field; по 10-20 значений в opcii
Строка из индекса:
[0] => Array
(
[id] => 14246883
[opcii] => 2818440,2818447,6698309,6728757,6747509,6747513,6747520,27675877,27675878,27675880,27675881,27675882,27675883,27675885,27675887,27675890,27675893,27675919
)

Делаю запрос:
SELECT id FROM products1 LIMIT 0 option max_matches = 1000000 FACET opcii LIMIT 1000000

получаю результат 112 495 значений, но НЕТ значения по opcii ‘27675877

Делаю запрос:
“SELECT id FROM products1 where opcii=27675877 LIMIT 0 option max_matches = 1000000 FACET opcii LIMIT 1000000”
получаю результат 70 значений и ЕСТЬ opcii ‘27675877
[10] => Array
(
[0] => 27675877
[1] => 76
)

Делаю запрос:
“SELECT id FROM products1 where id=14246883 LIMIT 0 option max_matches = 1000000 FACET opcii LIMIT 1000000”;
получаю результат 18 значений и тоже ЕСТЬ opcii ‘27675877
[10] => Array
(
[0] => 27675877
[1] => 1
)

version ‘6.3.8 d17bd2b6b@24112202 (columnar 2.3.0 88a01c3@24052206) (secondary 2.3.0 88a01c3@24052206) (knn 2.3.0 88a01c3@24052206)’

РS: Оказалось что FACET по количеству строк не может превысить количество строк в Индексе, у меня количество уникальных opcii sql_attr_multi больше чем строк, возможно ли это как то обойти?

FACET по количеству строк не может превысить количество строк в Индексе

Может. Вот пример:

mysql> drop table if exists t; create table t(a multi); insert into t values(1, (1,2,3,4,5)); select * from t facet a;
--------------
drop table if exists t
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
create table t(a multi)
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
insert into t values(1, (1,2,3,4,5))
--------------

Query OK, 1 row affected (0.00 sec)

--------------
select * from t facet a
--------------

+------+-----------+
| id   | a         |
+------+-----------+
|    1 | 1,2,3,4,5 |
+------+-----------+
1 row in set (0.00 sec)
--- 1 out of 1 results in 0ms ---

+------+----------+
| a    | count(*) |
+------+----------+
|    5 |        1 |
|    4 |        1 |
|    3 |        1 |
|    2 |        1 |
|    1 |        1 |
+------+----------+
5 rows in set (0.00 sec)
--- 5 out of 5 results in 0ms ---

Так что непонятно, почему у вас не работает. Может просто превышен лимит фасета, как тут?

mysql> drop table if exists t; create table t(a multi); insert into t values(1, (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23)); select * from t facet a;
--------------
drop table if exists t
--------------

Query OK, 0 rows affected (0.01 sec)

--------------
create table t(a multi)
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
insert into t values(1, (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23))
--------------

Query OK, 1 row affected (0.00 sec)

--------------
select * from t facet a
--------------

+------+-------------------------------------------------------------+
| id   | a                                                           |
+------+-------------------------------------------------------------+
|    1 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 |
+------+-------------------------------------------------------------+
1 row in set (0.00 sec)
--- 1 out of 1 results in 0ms ---

+------+----------+
| a    | count(*) |
+------+----------+
|   23 |        1 |
|   22 |        1 |
|   21 |        1 |
|   20 |        1 |
|   19 |        1 |
|   18 |        1 |
|   17 |        1 |
|   16 |        1 |
|   15 |        1 |
|   14 |        1 |
|   13 |        1 |
|   12 |        1 |
|   11 |        1 |
|   10 |        1 |
|    9 |        1 |
|    8 |        1 |
|    7 |        1 |
|    6 |        1 |
|    5 |        1 |
|    4 |        1 |
+------+----------+
20 rows in set (0.00 sec)
--- 20 out of 23 results in 0ms ---

Тогда обходится так:

select * from t facet a limit 1000
--------------

+------+-------------------------------------------------------------+
| id   | a                                                           |
+------+-------------------------------------------------------------+
|    1 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 |
+------+-------------------------------------------------------------+
1 row in set (0.00 sec)
--- 1 out of 1 results in 0ms ---

+------+----------+
| a    | count(*) |
+------+----------+
|   23 |        1 |
|   22 |        1 |
|   21 |        1 |
|   20 |        1 |
|   19 |        1 |
|   18 |        1 |
|   17 |        1 |
|   16 |        1 |
|   15 |        1 |
|   14 |        1 |
|   13 |        1 |
|   12 |        1 |
|   11 |        1 |
|   10 |        1 |
|    9 |        1 |
|    8 |        1 |
|    7 |        1 |
|    6 |        1 |
|    5 |        1 |
|    4 |        1 |
|    3 |        1 |
|    2 |        1 |
|    1 |        1 |
+------+----------+
23 rows in set (0.00 sec)
--- 23 out of 23 results in 0ms ---

Не могу решить проблему, в большой базе все еще не могу превысить количество строк в Индексе.
Мне нужно получить все строки, LIMIT не подходит, даже если задаю LIMIT со смещением так же нет желаемого результата.

Единственное что работает, но по времени долго, раз через LIMIT со смещением у меня не работает, то ставлю в where, в цикле categories=1…10, потом объединяю FACET и получаю нужное значение, т.е. все значения, превышающие количество строк в Индексе.

Не могу решить проблему, в большой базе все еще не могу превысить количество строк в Индексе.

Можно пример запроса и ответа?

Воссоздать можно так:
Таблица:
(id,opcii)
Индекс:
sql_query = SELECT id,opcii FROM test
sql_attr_multi = uint opcii from field

1 тест когда работает:
Создаю 100 строк с интервалом 25
(n1) INSERT INTO test (opcii) VALUES (‘1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25’);
(n100) INSERT INTO test (opcii) VALUES (‘2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500’);

Запрос:
SELECT id FROM test LIMIT 0 option max_matches = 10000 FACET opcii LIMIT 10000
Отдает 2500 строк, т.к. как нужно

2 тест когда НЕ работает:
Создаю 1000 строк с интервалом 25
(n1) INSERT INTO test (opcii) VALUES (‘1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25’);
(n1000) INSERT INTO test (opcii) VALUES (‘24976,24977,24978,24979,24980,24981,24982,24983,24984,24985,24986,24987,24988,24989,24990,24991,24992,24993,24994,24995,24996,24997,24998,24999,25000’);

Запрос:
SELECT id FROM test LIMIT 0 option max_matches = 25000 FACET opcii LIMIT 25000
Отдает 1000 строк, т.е. ровно по количеству в индексе, а нужно 25000

вам лучше завести тикет на Github с MRE которое вы выложили, тк в коде действительно используется ограничение по количеству документов в индексе в функции GetMaxMatches