ES minimum_should_match

개발새발·2022년 5월 14일
0

elasticsearch

목록 보기
22/54

기능 수정 요청으로 인해 기존 ES쿼리를 수정했어야했는데, 뭔가 이상한 점이 있었다. (그런데 결국 이 수정요청은 취소됐다^^...ㅎ)

이상했던 점 🤔

아래 쿼리로 요청을 보냈는데 이상하게 결과에 should 에 있는 조건이 하나도 적용이 안된 것이였다. 그래서 검색하다 보니, bool 쿼리 안에 mustshould 를 섞어쓰면 옵션변경이 필요하다고 한다.

"bool": {
    "must": [
      {
        "terms": {
          "field": [
	            "value"
          ]
        }
      }
    ],
    "filter": {
      "bool": {
         "must": [
           {
             "term": {
	               "field": "value"
	             }
           },
           {
             "term": {
                "field": "value"
	             }
           }
          ]
		   }
     },
     "should": [
       {
         "match": {
           "field": "value"
         }
       }
		]
  }
}

수정수정 👼

minimum_should_match 이라는 옵션이 있는데, 이 옵션은 bool 쿼리 안에 should 하나 이상이 있고, 다른 mustfilter 쿼리가 없다면 디폴트로 1 이 세팅이 되어있다고 한다. 그리고 다른 쿼리들에서는 디폴트로 0이 세팅되어있다고 한다. 그래서 should만을 가지고 검색할때는 원하는대로 동작하나, 내가 원하는 방법을 사용하고자 할때는 should 조건에 매칭되는 결과가 하나도 나오지 않았던 것이다. 그래서 아래처럼 쿼리문을 수정해주니 생각했던대로 잘 동작했다.

"bool": {
    "must": [
      {
        "terms": {
          "field": [
	            "value"
          ]
        }
      }
    ],
    "filter": {
      "bool": {
         "must": [
           {
             "term": {
	               "field": "value"
	             }
           },
           {
             "term": {
                "field": "value"
	             }
           }
          ]
		   }
     },
     "should": [
       {
         "match": {
           "field": "value"
         }
       }
		],
    "minimum_should_match": 1
  }
}

참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html#bool-min-should-match

profile
발새발개

0개의 댓글