본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


엘라스틱서치(Elasticsearch)

엘라스틱서치 and or절 생성시 유의사항(Elasticsearch should minimum_should_match )

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 7. 1.

엘라스틱 서치에서 should를 활용 하면 2중 1가지에 대한 값이 있는 경우에 대해서 결과를 반환 합니다.
그런데 막상 should를 사용하여 질의를 하면 둘중 한가지가 아니더라도 결과가 필터링되지 않고 전부 나오는 경우가 있습니다.
그러한 경우에는 should 조건문에서의 minimum_should_match 값이 기본값이 0으로 되어 있는지 의심을 해 보아야 합니다.
아래 기본 쿼리를 보겠습니다.

{ "query": { "bool": { "must": [ { "match_phrase": { "무조건가지고있어야하는필드": "값" } } ], "should": [ { "match_phrase": { "and 이후 or로 들어가는 필드1": "값1" } }, { "match_phrase": { "and 이후 or로 들어가는 필드2": "값" } } ] } } }


위 조건문이 존재 한 다면 must에 대한 조건은 동작 하는데 should 조건에 대해서는 동작하지 않을 수 있습니다.
이럴 때는 아주 간단한 옵션을 추가하여 주면 해결 가능 합니다.

{ "query": { "bool": { "must": [ { "match_phrase": { "무조건가지고있어야하는필드": "값" } } ], "should": [ { "match_phrase": { "and 이후 or로 들어가는 필드1": "값1" } }, { "match_phrase": { "and 이후 or로 들어가는 필드2": "값" } }, "minimum_should_match": 1 ] } } }


minimum_should_match의 옵션은 위 should 조건에 일치여부를 결정 합니다.
기본값이 0이라면 should 조건에 해당되지 않더라도 참(true)이 되게 되며, 지금 설정은 조건이 2개로 설정되어 있지만, 일치하는 값이 1개라도 있으면 참(true)을 반환하게 되어 있습니다.
요약하면,
minimum_should_match 값에 should에서의 일치하는 갯수를 지정한다 라고 생각하면 됩니다.
위에는 2개의 대상에 should조건이지만 둘 중 한개만 맞으면 참(true)이 될 것 입니다.
만약 2개로 한다면 2개인 경우 참(true)이되며, n개면 n개인 경우 참(true)이 되겠습니다.

2개가 검색이 된 모습 샘플 입니다. :)


이상으로 엘라스틱서치 should를 사용 할 때 minimum_should_match의 역할에 대해 살펴 보았습니다.
궁금한점 또는 틀린부분은 언제든 댓글 또는 메일로 연락주세요! 👻

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글