반응형
elasticsearch에서 query_string로 데이터 조회시에 쿼리문으로 ) 특수문자가 포함하여 조회했다. 하지만 다음과 같이 문제가 발생했다.
1 2 3 4 5 6 7 8 9 10 11 | { "error": { "root_cause": [ { "type": "parse_exception", "reason": "parse_exception: Encountered \" \")\" \") \"\" at line 1, column 11.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n " } ], "type": "search_phase_execution_exception", "reason": "all shards failed", "phase": "query", | cs |
확인해보니 + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ / 가 포함된 문장을 query_string를 통해서 조회하려고 하면 에러를 발생시킨다. 그래서 이를 해결하기 위해서 위에 reserved character들이 들어간 단어는 \\를 붙여주어야 한다.
이를 위한 자바스크립트는 다음과 같다.
1 2 3 | async escapeReservedCharacter(query) { return query.replace(/([!*+&|()<>[\]{}^~?:\-="/\\])/g, '\\$1'); } | cs |
이를 해결해서 query_string을 사용하면 문제가 해결된다.
참고 : https://stackoverflow.com/questions/26431958/escaping-lucene-characters-using-javascript-regex
반응형
'데이터베이스 > Elasticsearch' 카테고리의 다른 글
Elasticsearch에서 search_after 기능 사용하여 조회하기 (4) | 2018.11.17 |
---|---|
Elasticsearch에서 Full text queries와 Term level queries 정리 (0) | 2018.11.01 |
Elasticsearch에서 Paging시 max_result_window 초과시 조회가 안되는 이슈 (0) | 2018.10.13 |
Elasticsearch 6.4 기본 한글 형태소 분석기 노리 (nori) 설명 및 사전 추가하기 (0) | 2018.10.13 |
엘라스틱 서치 (elasticsearch) fielddata (0) | 2018.10.06 |