Sphinx RT index и поиск в json по значению - PullRequest
0 голосов
/ 01 ноября 2018

В rt index у меня есть поля - fields с rt_attr_json атрибутами. В этой области у меня есть такая структура (набор одинаковых блоков):

{
  block_name: "a",
  block_type: 1,
  elements: {
     {
       ...
     }
  }
}

Как я могу получить все записи из сфинкса с block_type = 1 и not empty elements в этом блоке?

Я знаю, как это реализовать, если я знаю ключ блока:

where fields[0].block_type=1 and fields[0].elements is null;

1 Ответ

0 голосов
/ 03 ноября 2018

Я не уверен, что полностью понял вопрос, но в Sphinx 3.1.1 хорошо работает следующее:

mysql> select * from jt;
+------+-------+-----------------------------+
| id   | title | j                           |
+------+-------+-----------------------------+
|    1 |       | {"type":1}                  |
|    2 |       | {"type":1,"elements":[]}    |
|    3 |       | {"type":1,"elements":[123]} |
|    4 |       | {"type":2}                  |
|    5 |       | {"type":2,"elements":[123]} |
+------+-------+-----------------------------+
5 rows in set (0.00 sec)

mysql> select * from jt where j.type=1 and j.elements is not null;
+------+-------+-----------------------------+
| id   | title | j                           |
+------+-------+-----------------------------+
|    2 |       | {"type":1,"elements":[]}    |
|    3 |       | {"type":1,"elements":[123]} |
+------+-------+-----------------------------+
2 rows in set (0.00 sec)

Обратите внимание, что любые предыдущие версии могут вести себя по-разному, поскольку обработка NULL была исправлена ​​до такой степени, что в самой последней версии 3.1.1 была частично переписана.

...