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{
)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.
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?