2016-02-08 160 views
3

我使用Elasticsearch Java API(版本2.1.1)和查詢字符串查詢。查詢字符串由用戶輸入,可能包含語法錯誤。現在好像查詢被髮送到服務器,響應是shardFailure並引發異常。Elasticsearch Java API:查詢字符串驗證

在將API發送到服務器之前,有一種簡單的方法可以驗證API中的查詢嗎?現在我正在捕捉異常,但是用這些查詢來困擾服務器並不合適。

查詢是建立這樣的:

QueryBuilders.queryStringQuery("error)"); 

實施例響應:

QueryParsingException [解析失敗查詢[錯誤)]];嵌套: NotSerializableExceptionWrapper [無法解析「錯誤)」:遇到「 ‘)’」)‘’第1行,第5列

編輯: 要明確: 這是查詢完全確定包含括號或引號之類的特殊字符。我只想檢查用戶是否輸入了正確的搜索查詢(例如成對的所有括號/引號)。

回答

-2

在將字符串傳遞給方法之前,您必須解析字符串並轉義所有特殊字符。

QueryBuilders.queryStringQuery(escapeSpecialCharacters("error)")); 

String escapeSpecialCharacters(String str) { 

    str.replaceAll(/[^\sa-zA-Z0-9]/, "\\'"); 
} 

如果需要,還可以刪除所有特殊字符。

希望這會有所幫助。

+0

這不是我想要的。像括號這樣的特殊字符是允許的,但它們必須成對才能在語法上正確。 – moeTi

+0

你是什麼意思的成對? PLease指定 – Richa

+0

如果您有兩個開頭的括號,那麼您還需要兩個關閉的括號,否則這是一個語法錯誤。 – moeTi