我正在使用elasticsearch python client对我们托管的elasticsearch示例进行一些查询。
我注意到有些字符需要转义。具体来说,这些…
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
除了我已经想到的方法之外,还有什么干净的方法吗?当然有比做更干净的方法
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
4条答案
按热度按时间2eafrhcq1#
是的,这些字符需要在您要在query_string query中搜索的内容中替换。要做到这一点(假设您使用的是PyLucene),您应该能够使用
QueryParserBase.escape(String)
。除此之外,您可以随时调整
QueryParserBase.escape
源代码以满足您的需求:zd287kbt2#
我修改了这段代码,找到了there:
ev7lccsx3#
为了直接回答这个问题,下面是一个使用
re.sub
的更干净的python解决方案然而,一个更好的解决方案是正确地解析出发送给elasticsearch的错误字符:
tjjdgumg4#
是的,这些字符将需要在您要在query_string查询中搜索的内容中替换。