주니어 기초 코딩공부/빅데이터 찍먹

03 엘라스틱서치: 검색

jju_developer 2023. 5. 30. 16:52
728x90

안녕하세요 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”인지 확인만 하면 되는 것이죠.

 

이것을 리액트에 적용하면

엑시오스를 활용하겠죠?

axios~

이런 식으로 작성하면 제이슨형식의 데이터를 반환하게 됩니다.


전문 쿼리와 용어 수준 쿼리

 

#전문 쿼리(full text query)는 전문 검색을 하기 위해 사용되며

전문 검색을 할 필드는 인덱스 매핑 시 텍스트 타입으로 매핑해야 합니다.

#매치 쿼리는 대표적인 전문 쿼리입니다.

전문 쿼리의 가장 기본이 되는 쿼리로 전체 텍스트 중 에서 특정 용어나 용어들을 검색할 때 사용합니다.

(매치 쿼리를 사용하기 위해서는 검색하고 싶은 필드를 알아야 합니다.)

 

#용어 수준 쿼리(term level query)는 정확히 일치하는 용어를 찾기 위해 사용되며,

인덱스매핑 시 필드를 키워드 타입으로 매핑해야 합니다.
• 아래 그림의 경우, 대소문자 차이로 매칭에 실패합니다.

용어 수준 쿼리는 전문 쿼리와 달리 정확한 용어를 검색할 때 사용됩니다.

 

#용어 쿼리는 용어 수준 쿼리의 대표적인 쿼리입니다.

용어 검색은 용어 수준 권리에 속하기 때 문에 검색어인 'mary bailey'가 분석기에 의해 토큰화되지 않는다.

즉 'myary bailey'라고 정확한 용어가 있는 경우만 매칭이 됩니다.

 

 

<정리>

모든 필터들은 독립적으로 적용

즉, 각 필터는 다른 필터들과 상관없이 데이터 원본 전체를 대상으로 각각 필터를 합니다.

그러나, ‘콘텍스트 필터’로 지정하면, 지정한 그 ‘컨텍스트 필터’가 데이터 원본 전체를 대상으로 필터를 먼저 하고, 그 필터 된 데이터에서 다른 필터들이 필터를 합니다.

<‘컨텍스트 필터’를 사용하는 경우는 두 가지>
- 필터가 너무 많거나 데이터 원본이 큰 경우: 
필터가 너무 많아 데이터(query)가 느려질 수 있으므로 성능 향상을 위해 '컨텍스트 필터'를 사용합니다.
- 상위 N 필터

 

수고하셨습니다 :>

728x90