엘라스틱 서치에서 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)이 되겠습니다.
이상으로 엘라스틱서치 should를 사용 할 때 minimum_should_match의 역할에 대해 살펴 보았습니다.
궁금한점 또는 틀린부분은 언제든 댓글 또는 메일로 연락주세요! 👻
'엘라스틱서치(Elasticsearch)' 카테고리의 다른 글
엘라스틱서치 노리 한글검색(Elasticsearch nori) 방법 (0) | 2021.06.22 |
---|---|
윈도우 엘라스틱서치 + 노리설치(window elasticsearch nori) (0) | 2021.06.08 |
윈도우 엘라스틱서치 + MongoDB 연동(window elasticsearch Mongodb monstache) (2) | 2021.05.28 |
윈도우 엘라스틱서치 + MSSQL 연동(window elasticsearch mssql logstash) (5) | 2021.05.28 |
엘라스틱 서치 기초 질의문 정리(Elasticsearch query) (0) | 2021.03.09 |
댓글