Поиск точек по вложенным объектам полезной нагрузки в Qdrant

Я знаю, что в коллекции Qdrant можно выполнять поиск по полезной нагрузке с помощью фильтров.

Например это/scroll точечный запрос

      {
    "filter": {
        "must": [
            {
                "key": "page_content",
                "match": {
                    "text": "days,  "
                }
            }
        ]
    },
    "limit": 1,
    "with_payload": true,
    "with_vector": false
}

возвращает результат:

      {
  "result": {
    "points": [
      {
        "id": "0024d2b5-b4db-4700-adbf-a23a6589789f",
        "payload": {
          "metadata": {
            "name": "test-test"
          },
          "page_content": "Though they don’t realize it when they are in their battles, the hero’s biggest\nreward  is  what  Campbell  calls  the  “boon,”  which  is  the  special  knowledge\nabout how to succeed that the hero has earned through his journey."
        },
        "vector": null
      }
    ],
    "next_page_offset": "0030eb00-7848-4440-85cc-086589775695"
  },
  "status": "ok",
  "time": 0.000294958
}

Но я не понимаю, как составить запрос, если мне придется искатьpayload.metadata.nameатрибут такой точки.

Как мне действовать?

Обратите внимание, что моему ограничению в этом приложении не разрешено добавлять больше прямых членов вpayloadобъект. Я могу писать только вmetadataАтрибут полезной нагрузки.

1 ответ

У меня такое же требование (неудивительно, поскольку именно такую ​​структуру полезной нагрузки создает LangChain). Оказывается, просто указать «точечное» имя свойства (аля Mongo) работает. В этом примере для запроса значений «имя» в документе «метаданные» вы должны использовать ключ «метаданные.имя» в фильтре Qdrant.

Кстати, подсказка для этого была в коде PR LangChain — https://github.com/hwchase17/langchain/pull/5446/files). Я подтвердил это с помощью Qdrant REST API.

Быстрое обновление – теперь оно есть в документации QDrant .

Другие вопросы по тегам