Regexp 쿼리
Regexp 쿼리
정규식과 일치하는 용어를 검색하려면 regexp 쿼리를 사용해요. 이 글에서는 regexp 쿼리 사용 시 중요한 고려 사항과 파라미터를 살펴봐요.
출처: 문서
본문
정규식과 일치하는 용어를 검색하려면 regexp 쿼리를 사용해요. 정규식 작성에 대한 자세한 내용은 Regular expression syntax를 참고하세요. 다음 쿼리는 대문자 또는 소문자로 시작하고 amlet이 뒤따르는 모든 용어를 검색해요:
GET shakespeare/_search
{
"query": {
"regexp": {
"play_name": "[a-zA-Z]amlet"
}
}
}
다음 중요한 고려 사항을 주의하세요:
- 정규식은 필드 전체가 아니라 필드의 용어(즉 토큰)에 적용돼요.
- 기본적으로 정규식의 최대 길이는 1,000자예요. 최대 길이를 변경하려면 index.max_regex_length 설정을 업데이트하세요.
- 정규식은 더 표준화된 구현과 다른 Lucene 문법을 사용해요. 기대한 결과를 얻는지 철저히 테스트하세요. 자세한 내용은 Lucene 문서를 참고하세요.
- regexp 쿼리 성능을 높이려면 .* 또는 .*?+처럼 접두어나 접미어가 없는 와일드카드 패턴을 피하세요.
- regexp 쿼리는 비용이 많이 드는 작업일 수 있으며 search.allow_expensive_queries 설정이 true로 설정되어 있어야 해요. regexp 쿼리를 자주 사용하기 전에 클러스터 성능에 미치는 영향을 테스트하고, 비슷한 결과를 낼 수 있는 대체 쿼리를 검토하세요.
- wildcard 필드 타입은 와일드카드 및 정규식 쿼리에 매우 효율적이도록 특별히 설계된 인덱스를 구성해요.
파라미터 (Parameters)
쿼리는 필드 이름(
GET _search
{
"query": {
"regexp": {
"": {
"value": "[Ss]ample",
...
}
}
}
}
value | 문자열(String) | boost | 부동 소수점(Floating-point) | 이 필드가 관련성 점수에 기여하는 가중치를 지정하는 부동 소수점 값이에요. 1.0보다 큰 값은 필드의 관련성을 높이고, 0.0과 1.0 사이의 값은 관련성을 낮춰요. 기본값은 1.0이에요.
case_insensitive | 불리언(Boolean) | true이면 정규식 값이 인덱싱된 필드 값과 대소문자를 구분하지 않고 일치하도록 허용해요. 기본값은 false예요(대소문자 구분은 필드의 매핑에 따라 결정돼요).
flags | 문자열(String) | Lucene 정규식 엔진의 선택적 연산자를 활성화해요. 유효한 값은 Optional operators를 참고하세요.
max_determinized_states | 정수(Integer) | Lucene은 정규식을 여러 확정 상태(determinized state)를 가진 오토마톤(automaton)으로 변환해요. 이 파라미터는 쿼리가 필요로 하는 최대 오토마톤 상태 수를 지정해요. 높은 리소스 소비를 방지하려면 이 파라미터를 사용하세요. 복잡한 정규식을 실행하려면 이 파라미터 값을 늘려야 할 수 있어요. 기본값은 10,000이에요.
rewrite | 문자열(String) | OpenSearch가 다중 용어 쿼리를 어떻게 다시 작성하고 점수를 매기는지 결정해요. 유효한 값은 constant_score, scoring_boolean, constant_score_boolean, top_terms_N, top_terms_boost_N, top_terms_blended_freqs_N이에요. 기본값은 constant_score예요.
search.allow_expensive_queries가 false로 설정되어 있으면 regexp 쿼리는 실행되지 않아요.