Экранирование поисковых запросов для службы полнотекстового поиска Google

Это перекрестный пост https://groups.google.com/d/ top/google-appengine/97LY3Yfd_14/discussion

Я работаю с новой службой полнотекстового поиска в gae 1.6.6, и мне трудно понять, как правильно экранировать строки запроса, прежде чем я передам их в индекс поиска. В документах упоминается, что некоторые символы необходимо экранировать (а именно числовые операторы), однако они не указывают каксинтаксический анализатор запросов ожидает, что строка будет экранирована.

Проблема, с которой я столкнулся, двояка:

  1. Неспособность избежать дерьма из многих символов (больше, чем те, на которые намекает документация) приведет к тому, что синтаксический анализатор вызовет QueryException.
  2. Когда я экранировал запрос до такой степени, что он не поднимался, числовые операторы (>, =,

Я настраиваю тест, в котором я подаю строку .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, похоже, не работает так, как рекламируется. либо.

tl;dr

Как мне экранировать запросы перед их отправкой в ​​поисковую службу, чтобы синтаксический анализатор не вызывал QueryExceptionимой запрос давал ожидаемые результаты?

5
задан Owen Nelson 24 May 2012 в 15:54
поделиться