首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转义Google全文搜索服务的搜索查询

转义Google全文搜索服务的搜索查询
EN

Stack Overflow用户
提问于 2012-05-24 15:54:25
回答 1查看 2.2K关注 0票数 6

这是14讨论的交叉帖子

我正在使用gae 1.6.6中的新全文搜索服务,在将查询字符串传递到搜索索引之前,我很难弄清楚如何正确地转义查询字符串。文档提到需要转义某些字符(即数值运算符),但是它们没有指定查询解析器期望如何转义字符串。

我面临的问题是两方面的:

  1. 如果不能从许多字符中转义(比文档中暗示的字符更多),将导致解析器引发QueryException
  2. 当我将查询转到不会引发的程度时,数值运算符(>,<,>=,<=)将不再正确解析(而不是搜索中的因素)。

我设置了一个测试,将string.printable输入到my_index.search()中,并发现它会在每个“可打印”的控制字符上提高QueryException,而我现在正在去掉这些字符,以及看起来无害的东西,比如星号、逗号、括号、大括号、倾斜字符。这些在文档中都没有提到需要转义。

到目前为止,我已经尝试过:

  • cgi.escape()
  • 具有ascii映射为urlencoded等价物的saxutils.escape() (如, -> %2C)
  • 具有ascii到html实体编码ascii代码的映射的saxutils.escape() (例如&#123;)
  • urllib.quote_plus()

到目前为止,我使用url样式(%NN)替换已经得到了最好的结果,但是>、<、>=和<=仍然无法从索引中获得预期的结果。而且,这似乎与转义问题没有任何关系,但在NOT类型查询前面使用field = value似乎也不像所宣传的那样有效。

tl;dr

在将查询发送到搜索服务之前,我应该如何转义查询,以便解析器不会引发QueryException,并且我的查询会产生预期的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-24 18:28:40

正如在文献资料中简要解释的那样,查询参数是一个字符串,应该符合我们的查询语言。我们应该更好地记录。

现在,我建议您将查询(或至少一些单词/术语)用双引号包装。这样,您就可以传递所有可打印的字符,但是传递"\。下面的示例显示了结果。

代码语言:javascript
复制
import string
from google.appengine.api.search import Query
Query('"%s"' % string.printable.replace('"', '').replace('\\', ''))

甚至可以传递不可打印的字符。

代码语言:javascript
复制
Query('"%s"' % ''.join(chr(i) for i in xrange(128)).replace('"','').replace('\\', ''))

编辑:注意任何包含在双引号中的内容都是完全匹配的,即"foo bar“将与...foo栏匹配.但没有...bar foo。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10741011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档