Escape de consultas de pesquisa para o serviço de pesquisa de texto completo do Google

Este é um cross-post dehttps://groups.google.com/d/topic/google-appengine/97LY3Yfd_14/discussion

Estou trabalhando com o novo serviço de pesquisa de texto completo no gae 1.6.6 e estou tendo problemas para descobrir como escapar corretamente de minhas strings de consulta antes de passá-las para o índice de pesquisa. Os documentos mencionam que certos caracteres precisam ser escapados (ou seja,operadores numéricos), no entanto, eles não especificamcomo o analisador de consulta espera que a sequência seja escapada.

O problema que estou tendo é duplo:

Deixar de escapar da porcaria de muitos caracteres (mais do que aqueles que são insinuados nos documentos) fará com que o analisador eleve umQueryException.Quando escapei da consulta até o ponto em que ela não aumentaria, os operadores numéricos (>, <,> =, <=) não são mais analisados ​​corretamente (não são incluídos na pesquisa).

Eu configuro um teste onde eu alimenteistring.printable para dentromy_index.search() e descobriu que isso aumentariaQueryException em cada um dos caracteres de controle "imprimíveis", que agora estou tirando, bem como coisas que parecem inocentes como asterisco, vírgula, parênteses, chaves, til. Nenhum deles é mencionado nos documentos como precisando ser escapado.

Até agora eu tentei:

cgi.escape()saxutils.escape() com um mapeamento de ascii para equivalentes urlencoded (por exemplo,, ->%2C)saxutils.escape() com um mapeamento de ascii para códigos ascii codificados por entidades html&#123;)urllib.quote_plus()

Eu obtive os melhores resultados até agora usando o estilo url (%NN) substituições, mas>, <,> = e <= continuam a não produzir os resultados esperados do índice. Além disso, e isso realmente não parece ter nada a ver com o problema de escape, mas usandoNOT na frente de umfield = value consulta tipo parece não estar funcionando como anunciado também.

tl; dr

Como devo escapar de minhas consultas antes de enviá-las ao serviço de pesquisa para que o analisador não aumenteQueryException e minha consulta gera resultados esperados?

questionAnswers(1)

yourAnswerToTheQuestion