我正在使用Elasticsearch python 客户端 https://elasticsearch-py.readthedocs.io/en/master/对我们托管的 elasticsearch 实例进行一些查询。
我注意到一些字符需要转义 http://lucene.apache.org/core/3_4_0/queryparsersyntax.html#Escaping%20Special%20Characters。具体来说,这些...
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
除了我已经想到的之外,还有一种干净的方法可以做到这一点吗?当然有比这样做更干净的方法
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