Owe*_*son 5 python google-app-engine full-text-search
这是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类型查询前使用似乎也不像广告中那样工作.
在将查询发送到搜索服务之前,我应该如何转义我的查询,以便解析器不会引发QueryException ,我的查询会产生预期的结果?
正如文档中简要解释的那样,查询参数是一个应该符合我们的查询语言的字符串。我们应该更好地记录这一点。
目前,我建议您将查询(或至少某些单词/术语)用双引号引起来。这样您就可以传递所有可打印字符,但"和\。以下示例显示了结果。
import string
from google.appengine.api.search import Query
Query('"%s"' % string.printable.replace('"', '').replace('\\', ''))
Run Code Online (Sandbox Code Playgroud)
你甚至可以传递不可打印的字符
Query('"%s"' % ''.join(chr(i) for i in xrange(128)).replace('"','').replace('\\', ''))
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,用双引号括起来的任何内容都是完全匹配的,即“foo bar”将与 ...foo bar... 匹配,但不会与 ...bar foo..
| 归档时间: |
|
| 查看次数: |
1832 次 |
| 最近记录: |