Это перекрестный пост https://groups.google.com/d/ top/google-appengine/97LY3Yfd_14/discussion
Я работаю с новой службой полнотекстового поиска в gae 1.6.6, и мне трудно понять, как правильно экранировать строки запроса, прежде чем я передам их в индекс поиска. В документах упоминается, что некоторые символы необходимо экранировать (а именно числовые операторы), однако они не указывают каксинтаксический анализатор запросов ожидает, что строка будет экранирована.
Проблема, с которой я столкнулся, двояка:
QueryException
.Я настраиваю тест, в котором я подаю строку .printable
в my_index.search()
и обнаружил, что он вызовет QueryException
для каждого из "печатаемых" управляющих символов, которые я сейчас удаляю, а также вещи, которые кажутся невинными, такие как звездочка, запятая, скобки, фигурные скобки, тильда. Ни один из них не упоминается в документах как требующий побега.
До сих пор я пробовал:
cgi.escape()
saxutils.escape()
с отображением ascii в urlencoded-эквиваленты (например, ,
-> %2C
)saxutils.escape()
с сопоставлением ascii с кодами ascii, закодированными объектами html (например, {
)urllib.quote_plus()
До сих пор я получал наилучшие результаты, используя замены в стиле url( %NN
), но >, = и NOTперед запросом типа field = value
, похоже, не работает так, как рекламируется. либо.
Как мне экранировать запросы перед их отправкой в поисковую службу, чтобы синтаксический анализатор не вызывал QueryException
имой запрос давал ожидаемые результаты?