Filter Context
Term Level Query라고도 부르며 해당 문서에 대한 필터링에 사용되는 쿼리이다. Query Context가 검색어가 문서에 얼마나 매칭되는지를 게산하고 찾는다면, Fliter Context는 검색어의 포함 여부를 찾는 형태이다. 둘 사이의 가장 큰 차이점은 검색어를 analyze 하는지의 여부
Filter Context 종류
종류 | 내용 |
term | 검색어로 입력한 단어와 정확하게 일치하는 단어가 있는지 찾음 |
terms | term과 유사하지만 여러 개의 단어를 기준으로 하나 이상 일치하는 단어가 있는지 찾음 |
range | 특정 범위 안에 있는 값이 있는지 찾음 |
wildcard | 와일드카드 패턴에 해당하는 값이 있는지 찾음 |
- term
term 쿼리는 정확하게 일치되는 단어를 찾을 때 사용. analyze를 하지 않기 때문에 당연히 대소문자를 구분한다.
위의 검색 결과를 보면 Japn으로 검색한 결과는 나오지 않지만 japan으로 검색한 결과는 출력된다. 이와같은 결과가 나오는 이유는 term 쿼리는 토큰이 저장된 inverted index에 있는 것들 중 정확하게 일치하는 값을 찾기 때문에 standard analyzer를 통해 소문자로 통일된 문자열인 japan을 저장한다. 따라서 첫 번째 쿼리인 Japan은 찾지 못하고 두 번째 쿼리인 japan을 찾을 수 있다. 만약 대소문자 관계없이 찾고 싶을 땐 term 쿼리대신 match 쿼리를 사용하여 된다.
- terms
terms 쿼리는 둘 이상의 term을 검색 할 때 사용하는 쿼리, 다수의 단어를 한 번에 검색할 때 사용한다.
term의 확장형으로 같은 필드 내에서 둘 이상의 term을 검색할 때 사용한다.
- range
range 쿼리는 범위를 지정하여 특정 값의 범위 이내에 있는 경우를 검색 할 때 사용한다.
dat을 기준으로 dat이 n부터 u인 문서를 검색하는 쿼리이다.
- wildcard
와일드카드 특수문자를 이용한 일종의 Full-Scan이 가능한 쿼리이다. text 필드가 아닌 keyword 타입의 쿼리에 사용해야한다.
country 중에 re라는 단어가 포함된 모든 책을 검색해준다. wildcard 쿼리는 inverted index를 하나하나 확인하기 때문에 검색 속도가 매우 느리고 문서의 개수가 늘어날수록 검색 결과도 선형적으로 늘어나기 때문에 주의해야한다. 이처럼 특정 단어를 찾을 때는 wildcard 쿼리보단 match 쿼리를 사용하는것이 더 효율적이다.
참고문헌: 기초부터 다지는 ElasticSearch 운영 노하우