- 쿼리 컨텍스트: 유사도를 계산해 결과를 보여줌
- 포함여부를 찾을 때
- 결과를 제공
- 필터 컨텍스트: 유사도를 계산하지 않고 일치여부에 대한 결과를 보여줌
- 정확하게 일치 여부를 찾을 때
- 예/아니오의 결과를 제공
- 스코어 계산하지 않음 => 쿼리 속도 빠름
- 결과 캐시 사용가능
- 엘라스틱서치는 힙 메모리의 10%를 캐시로 사용
- 쿼리 스트링
- 한 줄 정도의 간단한 쿼리
- 쿼리 DSL
- 한 줄에 넣기 힘든 복잡한 쿼리
- JSON기반
- 해당 용어가 포함된 도큐먼트를 반환
- BM25 알고리즘 기반
- 스코어가 높을 수록 찾으려는 도큐먼트에 가까움
- TF(Term Frequency), IDF(Inverse Document Frequency)
- 검색에 문서가 얼마나 자주 나타나는지, 중요한 용어인지 등을 판단
- IDF(Inverse Document Frequency)
- 문서빈도(DF)는 특정 용어가 얼마나 자주 등장하는지
- to, the 등은 자주 등장하나 큰 의미가 없음
- 빈도의 역수(IDF): 발생 빈도가 적을수록 가중치를 높게 줌
- TF(Term Frequency)
- 용어빈도(TF)는 특정 용어가 하나의 도큐먼트에 얼마나 많이 등장하는지
- 많이 반복될수록 주제와 연관 가능성 높음
- dl: 필드 길이
- avgdl: 전체 도큐먼트에서 평균 필드 길이
- dl이 작고, avgdl이 클수록 => TF 값이 큼
- 리프 쿼리: 특정 필드에서 용어를 찾는 쿼리
- match, term, rage 등...
- 전문 쿼리(full text query), 용어 수준 쿼리(term level query)
- 복합 쿼리: 쿼리를 조합해 사용되는 쿼리
- bool 등...
- 전문 쿼리: 전문 검색을 위해 사용
- 인덱스 매핑 시 텍스트 타입 => 분석기 사용, 토큰화
- 구글, 네이버 등 검색어 검색
- match query, match phrase query, multi-match query, query string query...
- 용어 수준 쿼리: 정확히 일치하는 용어를 찾기 위해 사용
- 인덱스 매핑 시 키워드 타입 => 분석기 사용하지 않음
- category
- 대소문자 차이로 실패할 수 있음
- 관계형 데이터베이스의 WHERE 절과 비슷한 역할
- term query, terms query, fuzzy query...
- 매치 쿼리
- 검색하고 싶은 필드명을 알아야 함
- 공백은 or로 인식
- operator로 and 조건 검색 가능(기본은 or)
- 매치 프레이즈 쿼리
- 구(phrase)를 검색할 때 사용
- 검색어에 사용된 용어들이 모두 포함되면서 용어의 순서까지 맞아야 함
- 검색시 많은 리소스를 요구하므로 자주 사용하는 것은 좋지 않다
- 용어 쿼리
- keyword, text 타입을 구분해야 함
- 용어들 쿼리
- 용어 수준 쿼리의 일종이며 여러 용어들을 검색해줌
- 키워드 타입 매핑 필드에서 사용해야 함
- 대소문자 구분해야 함
- 멀티 매치 쿼리
- 여러 개의 필드에서 검색하기 위한 전문 쿼리의 일종
- 텍스트 타입 매핑된 필드에서 사용하는 것이 좋음
- 여러개의 필드에서 개별 스코어를 구한 다음에 가장 큰 값을 대표 스코어로 구함
- 부스팅(boosting) 기법: 필드에 가중치 두는 방법
- 범위 쿼리
- 날짜, 숫자, IP 타입의 데이터는 가능
- 문자형, 키워드 타입은 불가능
- 현재 기준으로 검색할 수 있는 표현식이 존재
- 범위 지원 타입(6): integer_range, float_range, long_range, double_range, date_range, ip_range
- 날짜/시간 범위 타입은 범위를 지정하여 입력해야 함(date_range 타입과 date 타입은 다름!)
- relation 파라미터(3)
- intersects(기본): 쿼리 범위 값이 도큐먼트 범위 데이터를 일부라도 포함
- contains: 도큐먼트가 쿼리 범위 값을 모두 포함
- within: 도큐먼트 범위 데이터가 쿼리 범위 값 내에 전부 속해야 함
- 논리 쿼리(복합 쿼리: compound query)
- 쿼리 조합 가능
- 4개 타입 지원: must, must_not, should, filter
- must_not 다른 타입과 사용하면 좋음
- must 복수개(and), should 복수개(or)
- should를 사용하여 검색순위 최적화 가능(우선순위를 상위로 올림)
- filter: 먼저 필터링하여 불필요한 스코어 계산을 줄여 성능 높일 수 있음
- 패턴 검색
- 검색어가 길거나 정확히 알지 못하는 경우
- 와일드카드 쿼리
- *: 길이 상관 없음
- ?: 1개의 문자와 매칭(길이 중요)
- 정규식 쿼리
- *: 앞 문자가 0번 혹은 여러번
- +: 앞 문자가 1번 이상
- ?: 0번 또는 한번 그러나 자리수 중요함
- +/?/* 가 맨 앞에 올 수 없음