Поиск по массиву json

Добрый день :slight_smile:
Я создал индекс
create table IF not EXISTS data(nomer string, level int, name text, spec json)
Затем я заполнил индекс и в поле spec загнал данные вот такие
[
{
top: “toptoptop1”,
affected_items: “item1”
},
{
top: “toptoptop1”,
affected_items: “item1”
},

{
top: “toptoptopN”,
affected_items: “itemN”
}
]
Вот теперь вопрос, как я могу осуществить поиск по полю “top”, я нигде не нашел инфу, единственный выход я пока что вижу что это создать другой индекс а потом его связать?

Хочу избавиться от эластика, там я делаю такой поиск через nested.

используйте нужные вам функции из раздела Manticore Search Manual: Functions > Arrays and conditions functions

Вы так же можете попробовать пройти интерактивные курсы по этой теме ANY(), ALL() and IN()
и Working with JSON attributes

Я посмотрел доку, но я все равно не вижу как мне сделать нечеткий поиск по полю “top”, в приведенный примерах зачем-то используется подзапрос(я не знаю как это по другому назвать) в select, чтобы потом отфильтровать его в where, я попытался добавить match в цикл, но ожидаемо появилась ошибка ( ```
any(MATCH(x.top “top1”) for x in spec)

Нечёткий поиск и match в принципе можно делать только по полнотекстовым полям. По json полям нельзя.

Я понял, а Вы планируете добавить такой функционал? чтобы пользак на этапе создания индекса/таблицы мог указать структуру json? в эластике это оч удобно

на этапе создания индекса/таблицы мог указать структуру json?

Можно пример, как вы это делаете в эластике?

при создании индекса я пишу вот так

"coord_user": {
        "type": "nested",
        "dynamic": "strict",
        "properties": {
          "affected_items": {
            "type": "keyword"
          },
          "top": {
            "type": "text"
          }
        }
      }

Вот тут еще немного про это Nested query | Elasticsearch Guide [8.16] | Elastic

nested поля можно разворачивать на этапе индексации в поля c вложенными именами, типа top.type и при поиске искать текст с ограничителем по полю ... WHERE MATCH('@top.type text') но у нас это не делается

Может остался код который делал такое в режиме совместимости, а может уже и нет.

Ничего не понятно, но очень интересно :grinning: