这是https://groups.google.com/d/topic/google-appengine/97LY3Yfd_14/discussion的交叉帖子
我正在使用 gae 1.6.6 中的新全文搜索服务,但在将查询字符串传递给搜索索引之前,我无法弄清楚如何正确转义查询字符串。文档提到某些字符需要转义(即数字运算符),但是它们没有指定查询解析器如何期望字符串被转义。
我遇到的问题有两个:
- 未能从许多字符中逃脱废话(比文档中暗示的更多)将导致解析器引发
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
) 替换获得了最好的结果,但是 >、<、>= 和 <= 仍然无法从索引中产生预期的结果。此外,这似乎与转义问题没有任何关系,但NOT
在类型查询前面使用field = value
似乎也没有像宣传的那样工作。
tl;博士
我应该如何在将查询发送到搜索服务之前对其进行转义,以便解析器不会引发QueryException
并且我的查询会产生预期的结果?