elasticsearch python clientを使用して、私たちがホストしているelasticsearchインスタンスに対して何らかのクエリを実行しています。elasticsearchで特殊文字をエスケープする
私は気づいたsome characters need to be escaped。具体的には、これらは...
私が既に念頭に置いたことを超えてこれを行うためのクリーンな方法はありますか?確かにそこに私は、私が使用できるAPIの呼び出しがあった期待していた
term
.replace("+", "\+")
.replace("-", "\-")
# ....etc
を行うよりもきれいな方法ですが、私は、ドキュメント内の1つのを見つけることができません。これは誰かによって解決されているはずの十分な共通の問題のようです。
誰もがこれを行う "正しい"方法を知っていますか?
編集: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は、あまりにも、その上にエスケープする必要がある他の文字があります。https:/あなたは常にあなたのニーズに
QueryParserBase.escape
ソースコードを適応させることができ、ことをバーリング/www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-query-string-query.html#_reserved_characters(これはv2.3で、配布したものを参照してください) – justderb