Escape-Suchanfragen für den Google-Volltextsuchdienst

Dies ist ein Cross-Post vonhttps://groups.google.com/d/topic/google-appengine/97LY3Yfd_14/discussion

Ich arbeite mit dem neuen Volltextsuchdienst in gae 1.6.6 und habe Probleme damit, meine Abfragezeichenfolgen korrekt zu maskieren, bevor ich sie an den Suchindex weitergebe. In den Dokumenten wird erwähnt, dass bestimmte Zeichen maskiert werden müssen (d. Hnumerische Operatoren), aber sie geben nicht anWie Der Abfrageparser erwartet, dass die Zeichenfolge maskiert wird.

Ich habe zwei Probleme:

Wenn es nicht gelingt, dem Mist vieler Zeichen zu entkommen (mehr als in den Dokumenten angegeben), löst der Parser a ausQueryException.Wenn ich die Abfrage so weit maskiert habe, dass sie nicht mehr ausgelöst wird, werden die numerischen Operatoren (>, <,> =, <=) nicht mehr korrekt analysiert (bei der Suche nicht berücksichtigt).

Ich richte einen Test ein, bei dem ich fütterestring.printable inmy_index.search() und festgestellt, dass es erhöhen würdeQueryException auf jedem der "druckbaren" Steuerzeichen, die ich jetzt herausnehme, sowie auf Dingen, die unschuldig erscheinen würden, wie Sternchen, Komma, Klammern, Klammern, Tilde. In den Dokumenten wird nicht erwähnt, dass ein Escape-Befehl erforderlich ist.

Bisher habe ich versucht:

cgi.escape()saxutils.escape() mit einer Zuordnung von ASCII zu urlencodierten Äquivalenten (z, ->%2C)saxutils.escape() mit einer Zuordnung von ASCII zu HTML-Entity-codierten ASCII-Codes (z&#123;)urllib.quote_plus()

Ich habe die besten Ergebnisse bisher mit url-style erzielt (%NN) Ersetzungen, aber>, <,> = und <= liefern weiterhin nicht die erwarteten Ergebnisse aus dem Index. Auch und dies scheint nicht wirklich etwas mit dem entkommenden Problem zu tun zu haben, sondern mitNOT vor einemfield = value Typabfrage scheint auch nicht wie angekündigt zu funktionieren.

tl; dr

Wie kann ich meine Abfragen umgehen, bevor ich sie an den Suchdienst sende, damit der Parser nicht ausgelöst wird?QueryException und Meine Abfrage liefert erwartete Ergebnisse?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage