Ucieczka z zapytań wyszukiwania dla usługi wyszukiwania pełnotekstowego Google

To jest cross-post ofhttps://groups.google.com/d/topic/google-appengine/97LY3Yfd_14/discussion

Pracuję z nową usługą wyszukiwania pełnotekstowego w gae 1.6.6 i mam problem z ustaleniem, jak poprawnie uciec z moich łańcuchów zapytań, zanim przekażę je do indeksu wyszukiwania. Dokumenty wspominają, że niektóre postacie muszą być zbierane (a mianowicieoperatory numeryczne), jednak nie określająw jaki sposób parser zapytań oczekuje, że łańcuch zostanie ukryty.

Problem, który mam, jest dwojaki:

Niepowodzenie w ucieczce z wielu znaków (więcej niż w podpowiedziach w dokumentach) spowoduje, że parser podniesieQueryException.Kiedy uciekłem z kwerendy do punktu, w którym nie podniosę, operatory numeryczne (>, <,> =, <=) przestaną poprawnie analizować (nie są uwzględniane w wyszukiwaniu).

Konfiguruję test, w którym karmięstring.printable wmy_index.search() i stwierdził, że to wzrośnieQueryException na każdym z „drukowalnych” znaków kontrolnych, które teraz usuwam, a także na rzeczach, które wydają się niewinne, jak gwiazdka, przecinek, nawias, szelki, tylda. Żaden z nich nie jest wymieniony w dokumentach, które wymagają ucieczki.

Do tej pory próbowałem:

cgi.escape()saxutils.escape() z odwzorowaniem ascii na równoważniki urlencoded (np, ->%2C)saxutils.escape() z mapowaniem ascii na kod ascii encji zakodowanej w html (np&#123;)urllib.quote_plus()

Do tej pory osiągnąłem najlepsze wyniki za pomocą stylu url (%NN) zamienniki, ale>, <,> =, i <= nadal nie dają oczekiwanych wyników z indeksu. Poza tym wydaje się, że nie ma to nic wspólnego z uciekającym problemem, ale z użyciemNOT przed afield = value wydaje się, że kwerenda typu nie działa tak jak w reklamie.

tl; dr

Jak powinienem unikać moich zapytań przed wysłaniem ich do usługi wyszukiwania, aby parser nie podniósłQueryException i moje zapytanie daje oczekiwane wyniki?

questionAnswers(1)

yourAnswerToTheQuestion