안녕하세요 jju_developer입니다.
오늘은 간단하게 일렉서치의 쿼리 콘텍스트와 필터 콘텍스트에 대해 알아보겠습니다.
쿼리 콘텍스트는 질의에 대한 유사도를 계산해 이를 기준으로 더 정확한 결과를 먼저 보여줍니다.
반면 필터 콘텍스트는 유사도를 계산하지 않고 일치 여부에 따른 결과만을 반환한다는 차이점이 있습니다.
쿼리 콘텍스트 예시)
예는 kibana_sample_data_ecommerce 인덱스에 있는 category 필드의
역인덱스 테이블에 clothing 용어가 있는 도큐먼트를 찾아달라는 요청입니다.
hits.total은 인덱스에서 3927의 도큐먼트를 찾았음을 의미하며, 3927개 중에서 top 10 만 보여줍니다.
_score 값은 요청한 검색과 유사도를 나타내는 지표로, 일반적으로 값이 클수록 찾고자 하는 도큐먼트일 확률이 높습니다.
이렇게 검색하는 것이 쿼리 컨택스트이며, 검색 시 주로 match를 씁니다.
(=매치 쿼리라고도 부름)
필터 콘텍스트 예시)
예는 day_of_week 필드가 'Friday'인 도큐먼트를 찾아달라는 요청입니다.
770개의 도큐먼트를 찾았는데 응답 결과를 보면 스코어가 계산되지 않고 0.0으로 나옵니다.
day_of_week가 “Friday”인지 확인만 하면 되는 것이죠.
이것을 리액트에 적용하면
엑시오스를 활용하겠죠?
이런 식으로 작성하면 제이슨형식의 데이터를 반환하게 됩니다.
#전문 쿼리(full text query)는 전문 검색을 하기 위해 사용되며
전문 검색을 할 필드는 인덱스 매핑 시 텍스트 타입으로 매핑해야 합니다.
#매치 쿼리는 대표적인 전문 쿼리입니다.
전문 쿼리의 가장 기본이 되는 쿼리로 전체 텍스트 중 에서 특정 용어나 용어들을 검색할 때 사용합니다.
(매치 쿼리를 사용하기 위해서는 검색하고 싶은 필드를 알아야 합니다.)
#용어 수준 쿼리(term level query)는 정확히 일치하는 용어를 찾기 위해 사용되며,
인덱스매핑 시 필드를 키워드 타입으로 매핑해야 합니다.
• 아래 그림의 경우, 대소문자 차이로 매칭에 실패합니다.
용어 수준 쿼리는 전문 쿼리와 달리 정확한 용어를 검색할 때 사용됩니다.
#용어 쿼리는 용어 수준 쿼리의 대표적인 쿼리입니다.
용어 검색은 용어 수준 권리에 속하기 때 문에 검색어인 'mary bailey'가 분석기에 의해 토큰화되지 않는다.
즉 'myary bailey'라고 정확한 용어가 있는 경우만 매칭이 됩니다.
<정리>
모든 필터들은 독립적으로 적용
즉, 각 필터는 다른 필터들과 상관없이 데이터 원본 전체를 대상으로 각각 필터를 합니다.
그러나, ‘콘텍스트 필터’로 지정하면, 지정한 그 ‘컨텍스트 필터’가 데이터 원본 전체를 대상으로 필터를 먼저 하고, 그 필터 된 데이터에서 다른 필터들이 필터를 합니다.
<‘컨텍스트 필터’를 사용하는 경우는 두 가지>
- 필터가 너무 많거나 데이터 원본이 큰 경우:
필터가 너무 많아 데이터(query)가 느려질 수 있으므로 성능 향상을 위해 '컨텍스트 필터'를 사용합니다.
- 상위 N 필터
수고하셨습니다 :>
'주니어 기초 코딩공부 > 빅데이터 찍먹' 카테고리의 다른 글
캐글 CSV 파일을 활용한 인덱스 작성 (0) | 2023.06.07 |
---|---|
05 엘라스틱 스택_키바나 소개_Visualize (0) | 2023.06.01 |
04 엘라스틱 스택_키바나 소개_discover (0) | 2023.06.01 |
02 엘라스틱서치 기본 (0) | 2023.05.30 |
01 엘라스틱 스택 (ELK Stack) (0) | 2023.05.25 |