【发布时间】:2017-03-06 11:35:47
【问题描述】:
我正在使用elasticsearch python client 对我们托管的 elasticsearch 实例进行一些查询。
我注意到some characters need to be escaped。具体来说,这些...
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
除了我已经想到的之外,有没有一种干净的方法可以做到这一点?当然有比做更清洁的方法
term
.replace("+", "\+")
.replace("-", "\-")
# ....etc
我希望有一个我可以使用的 API 调用,但我在文档中找不到。这似乎是一个很常见的问题,应该由某人解决。
有人知道“正确”的做法吗?
编辑:我仍然不确定是否有 API 调用,但我得到的东西足够简洁,足以让我满意。
def needs_escaping(character):
escape_chars = {
'\\' : True, '+' : True, '-' : True, '!' : True,
'(' : True, ')' : True, ':' : True, '^' : True,
'[' : True, ']': True, '\"' : True, '{' : True,
'}' : True, '~' : True, '*' : True, '?' : True,
'|' : True, '&' : True, '/' : True
}
return escape_chars.get(character, False)
sanitized = ''
for character in query:
if needs_escaping(character):
sanitized += '\\%s' % character
else:
sanitized += character
【问题讨论】:
-
提醒未来的读者:Elasticsearch 还有其他需要转义的字符:elastic.co/guide/en/elasticsearch/reference/2.3/…(这是 v2.3,请参阅您已部署的那个)
标签: python elasticsearch replace lucene escaping