2016-04-07 86 views
1

我可能沒有正確理解這一點,但是當使用查詢字符串查詢搜索我的索引時,它指出需要轉義保留字符或特殊字符。保留字符是否需要在Elasticsearch查詢中轉義?

https://www.elastic.co/guide/en/elasticsearch/reference/2.1/query-dsl-query-string-query.html#_reserved_characters

保留的字符是:+ - = & & || > <! (){} [] ^「〜*?:\/

未能正確轉義這些特殊字符可能會導致語法錯誤,從而阻止您的查詢運行。

目前我的索引不標記特殊字符,因爲我只使用標準分析器,但是我確實在所有字符串字段上都進行了分析和未分析。

所以,如果我有這些字符串索引:

quick fox 
brown fox 

當我運行一個查詢:

{ 
    "query_string" : { 
     "query" : "(quick OR brown) AND fox", 
    } 
} 

正確的結果回來。但是,基於保留字符文檔,查詢字符串查詢中是否需要使用括號「(」和「)」進行轉義?對於何時轉義保留字符以及何時不轉到查詢中,我有點困惑。

是否需要?:是

{ 
    "query_string" : { 
     "query" : "\(quick OR brown\) AND fox", 
    } 
} 

我知道,括號用於分組是很有意義不要逃避它們。但是在Elasticsearch的查詢中總是需要保留哪些保留字符?只有當保留的字符是操作符時?

回答

1

只有在保留字符不屬於查詢語法的情況下才需要轉義。

所以在(quick OR brown) AND fox你不能逃脫任何東西。

但是,如果您的字段包含您要搜索的保留字符,例如,您的字段包含Hello!!是保留字符相當於NOT,你要搜索Hello!,那麼你的查詢需要是這樣

`Hello\! AND blabla` 
     ^^ 
     || 
escaped reserved char 
+0

這就是我想在初期,一些保留的字符會拋出一個解析異常,例如:如果查詢字符串爲「etc/elasticsearch」,則會拋出異常。這就是爲什麼我不清楚需要爲搜索查詢轉義哪些字符,並且不會影響搜索結果。 – Lumpy

+0

在這種情況下,您需要像這樣'etc \/elasticsearch'來轉義它,因爲正斜槓是您正在查詢的值的一部分,而不是查詢語法的一部分 – Val

+0

我想這正是我試圖找到的。哪些保留字符需要轉義或哪些可以通過。 – Lumpy

相關問題