220401 elasticsearch bool 쿼리 검색법

1 분 소요

elasticsearch의 검색법을 드디어 이해한 듯 하여 정리 차원에서 적어보려고 한다.
우선, OR과 AND를 정확하게 사용하고자 한다면, bool query의 must와 should를 사용해야 한다.

must는 {} 하나 혹은 여러 쌍으로 구성될 수 있으며 {} 속에는 reqexp, match 등 필드 검색의 유형을 지정할 수 있는 것 같다. 검색된 내용은 must의 조건에 모두 부합하는 and 연산의 결과를 보여주게 된다.
should도 마찬가지로 동작하지만, 검색 조건 중 하나라도 일치할 시 결과를 나타내 준다. 예를 들어

query:{
  should:[
    {
      regexp:{
        field1:term.*
      }
    },
    {
      match:{
        field2:terms2
      }
    }
  ]
}

와 같은 쿼리는 field1이 term으로 시작하는 결과와 field2가 terms2인 결과를 모두 가져오게 된다. 다만 이 경우, 조건 중 하나라도 있으면 결과를 주기 때문에 사용의 제한이 명확할 수 있다.
이 때 사용하는 조건으로, minimum_should_match 파라미터가 query 내에 존재한다.

query:{
  minimum_should_match:2,
  should:[
    {
      regexp:{
        field1:term.*
      }
    },
    {
      match:{
        field2:terms2
      }
    }
  ]
}

위와 같은 경우, 적어도 should 절 2개가 맞아야지만 검색 결과가 리턴된다. should의 수를 제한하여 사용할 수 있는 유용한 기능이다.

must와 should 이외에 filter가 존재한다. filter는 must와 should와 달리 검색 결과에 영향을 끼치지 않는 (score에 반영되지 않는) 말그대로 필터링 용도의 파라미터이다.


bool 쿼리의 세 가지 방법 말고도 알게 된 다양한 지식이 있다.

  1. 쿼리 DSL의 다양한 경우를 사용하면 웬만한 검색이 모두 가능하다.
  2. mapping은 필드가 구성되는 스키마를 나타내며, 필드의 자료형, synonym 혹은 검색 시 동작까지 정할 수 있는 것 같았다.
  3. 정확한 HTML request들을 통해 누군가 만든 라이브러리 없이도 사용 가능하다.

사실 사용법을 알게 되었기 때문에 이제 필요한 기능에 대해 documentation을 보면 알 수 있지 않을까라는 생각이 든다.

카테고리:

업데이트: