Поиск точек по вложенным объектам полезной нагрузки в 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 .