Невозможно ли разбить на страницы отфильтрованные результаты с помощью векторной базы данных Weaviate?
Фильтр запросов работает
Использование фильтрации запросов Weaviate работает нормально, например, из их руководства :
response = (
client.query
.get("JeopardyQuestion", ["question", "answer", "round"])
.with_where({
"path": ["round"],
"operator": "Equal",
"valueText": "Double Jeopardy!"
})
.with_limit(20)
.do()
)
Пагинация взрывается?
Но получение первых 20 результатов бесполезно для полнофункциональной функции семантического поиска. Нам нужна нумерация страниц, чтобы получить следующие 20 результатов, следующие 20 и так далее. Для этого Weaviate использует курсоры запросов , где указывается UUID записи:
response = (
client.query
.get("JeopardyQuestion", ["question", "answer", "round"])
.with_where({
"path": ["round"],
"operator": "Equal",
"valueText": "Double Jeopardy!"
})
.with_after("6726aaa8-818b-49dc-8fea-9bc646ddfed6") # <-- ID cursor pagination
.with_limit(20)
.do()
)
Но это вызывает ошибку:
where cannot be set with after and limit parameters
Ошибка возникает из этой строки кода Weaviate , иwith_after()
В документах говорится, что «требуется установить ограничение, но его нельзя комбинировать с другими фильтрами или поиском » .
Поэтому мы не можем комбинировать фильтры, курсоры и параметры ограничения таким образом.
Каков правильный способ разбиения на страницы отфильтрованных запросов?
1 ответ
вы можете разбивать на страницы, используяwith_limit()
иwith_offset()
методы вместе.
Например, предположим, что у вас есть 10 записей в БД для данногоSomeClass
class, и вы хотите получить первые 5 записей с помощью одного запроса, а следующие 5 — с помощью следующего запроса.
Первый запрос:
client.query.get("SomeClass", "someProp").with_offset(0).with_limit(5).do()
Второй запрос:
client.query.get("SomeClass", "someProp").with_offset(5).with_limit(5).do()