(참고하면 좋을 블로그)

참고😄

본문에 앞서서..


✏️ (1)편에서는 우리 팀에 프로젝트에서 사용한 쿼리문들을 서술하였다. 이번 (2)편에서는 어떤 내용들을 서술할 것이냐면 (1)편에 서술했던 쿼리들을 조합해서 복합적인 쿼리를 사용할 수 있는 bool 쿼리를 소개해 보겠다.


Bool 쿼리란?(must, must_not)


Bool 말 그대로 복합 쿼리를 의미한다. bool 쿼리에는 여러 옵션이 있다. 첫번째로는 must 옵션인데 이 옵션은 쿼리의 검색 값이 참인 document들을 검색한다. 이 쿼리와 같이 잘 사용된는 쿼리로는 must_not쿼리가 있는데 이 쿼리의 검색 단어가 특정 field안에 존재하지 않은 doument들을 검색한다. 말로 설명하기 보단 코드로 설명하는 것이 더욱 이해가 잘 되기 때문에 코드로 must와 must_not 쿼리를 알아 보도록 하자~

Request(must쿼리만 사용)

GET library/_search { "query": { "bool":{ "must": [ { "match": { "bookName": "개미" }

      }
    ]
  }
}

}

Response

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5986,
      "relation" : "eq"
    },
    "max_score" : 11.215282,
    "hits" : [
      {
        "_index" : "library",
        "_type" : "_doc",
        "_id" : "LeVqhIMBbxEhYhgGVYWT",
        "_score" : 11.215282,
        "_source" : {
          "_class" : "com.example.elasticsearchtest.domain.LibraryEs",
          "bookName" : "공룡개미 개미공룡",
          "authors" : "김성화;권수진 [공]글김규택 그림",
          "classNum" : "457.279",
          "isbn13" : "9788964963692",
          "libraryName" : "강남구립역삼푸른솔도서관",
          "publicationYear" : "2018",
          "publisher" : "토토북",
          "vol" : ""
        }
      },//.....[생략]
	    {
        "_index" : "library",
        "_type" : "_doc",
        "_id" : "xDSghIMBbxEhYhgG9F1h",
        "_score" : 11.215282,
        "_source" : {
          "_class" : "com.example.elasticsearchtest.domain.LibraryEs",
          "bookName" : "개미의 습격:개미",
          "authors" : "앤 제임스 글;앤터니 루이스 그림;조세희 옮김",
          "classNum" : "408",
          "isbn13" : "9788960160385",
          "libraryName" : "강남구립대치도서관",
          "publicationYear" : "2010",
          "publisher" : "한국가우스",
          "vol" : ""
        }
      },//.....[생략]
}

방금 코드의 설명처럼 “bookName” field안에 “개미”가 들어가있는 document들이 검색이 되는 것을 확인 할 수 있다. 그럼 must_not은 어떻게 동작하는지는 아래 코드를 보며 설명하겠다.

Request(must, must_not쿼리 모두 사용)