【发布时间】:2019-10-04 18:06:02
【问题描述】:
这是https://groups.google.com/d/topic/google-appengine/97LY3Yfd_14/discussion的交叉帖
我正在使用 gae 1.6.6 中的新全文搜索服务,但在将查询字符串传递给搜索索引之前,我无法弄清楚如何正确转义查询字符串。文档提到某些字符需要转义(即numeric operators),但是他们没有指定查询解析器希望字符串被转义的方式。
我遇到的问题有两个:
- 如果无法从许多字符中逃脱(超过文档中暗示的字符)将导致解析器引发
QueryException。 - 当我将查询转义到它不会引发的点时,数字运算符(>、=、
我设置了一个测试,将 string.printable 输入到 my_index.search() 中,发现它会在每个“可打印”控制字符上引发 QueryException看起来像星号,逗号,括号,大括号,波浪号一样无辜。这些都没有在文档中提到需要转义。
到目前为止我已经尝试过:
cgi.escape()-
saxutils.escape()将 ascii 映射到 urlencoded 等效项(例如,->%2C) -
saxutils.escape()带有 ascii 到 html 实体编码的 ascii 代码的映射(例如{) urllib.quote_plus()
到目前为止,我使用 url-style(%NN) 替换获得了最好的结果,但是 >、= 和 field = value 类型查询前面使用 NOT 似乎也不能像宣传的那样工作。
tl;博士
我应该如何在将查询发送到搜索服务之前对其进行转义,以便解析器不会引发QueryException并且我的查询会产生预期的结果?
【问题讨论】:
标签: python google-app-engine full-text-search