Невозможно ли разбить на страницы отфильтрованные результаты с помощью векторной базы данных 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 записей в БД для данногоSomeClassclass, и вы хотите получить первые 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()
Другие вопросы по тегам