v6: Filter containsAny(String) sends a scalar, which the server always rejects

Offen Anfängerfreundlich
#630 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
75/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
java

Rechercherichtung

Lies src/main/java/io/weaviate/client6/v1/api/collections/query/Filter.java im Bereich der Überladung containsAny(String) und vergleiche sie mit der Überladung List. Prüfe in den vorhandenen Filtertests, wie value_text_array serialisiert wird, und bestätige dann, dass die einzelne Zeichenfolge als Array mit einem Element gesendet wird; die zugehörigen Überladungen sind als potenziell betroffen vermerkt. Erledigt ist die Aufgabe, wenn die Anfrage dem Array-Vertrag des Servers entspricht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Summary

Filter.property(p).containsAny(String value), the single-value overload, sends a scalar value_text. The server rejects ContainsAny with a scalar on every property type and transport, so this overload can never succeed. It is also the one Java picks for containsAny("x"), so it's the easiest one to call.

https://github.com/weaviate/java-client/blob/ff57caed14df5778ef715132d618383da559c1cc/src/main/java/io/weaviate/client6/v1/api/collections/query/Filter.java#L458-L460

Reproduction (client 6.3.2, server 1.39.13)

Property tags is text[]:

collection.query.fetchObjects(q -> q.filters(Filter.property("tags").containsAny("tag1")));
// sent: value_text: "tag1"
// WeaviateApiException: ... extract contains values: value type should be []string but is string

collection.query.fetchObjects(q -> q.filters(Filter.property("tags").containsAny(List.of("tag1"))));
// sent: value_text_array { values: "tag1" }   → works

The server gives the same error for a scalar ContainsAny on a plain text property, and over GraphQL. So the server contract is "always an array", and the single-value overload doesn't follow it.

Expected

containsAny(String) sends a one-element value_text_array. Removing the overload would also work, since varargs covers it. The same probably applies to containsAll and containsNone, and to the single-value overloads of the other types, though I've only verified String.

Vorherrschende Sprache
Java
Sterne
34
Forks
29
Ø Merge
2 T. 10 Std.
Gemergte PRs (30 T.)
2

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus weaviate/java-client

Alle Issues in weaviate/java-client

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.