ELASTICSEARCH

[엘라스틱서치] 3. 데이터 조건에 따라 검색하기

sejin2 2024. 3. 11. 17:45

원하는 조건에 따라 검색이 가능하다.

먼저 이름이 park인 데이터를 조회하고, 이름이 park이면서 나이가 22인 데이터를 조회해본다.

- term : 정확히 일치한 것 검색 ( 숫자 )

⇒ 문자는 검색이 안될 수도 있다. ( 파싱한 값에 따라 달라지므로 잘 사용하지 않음 )

GET basketball/_search
{
  "query" : {
    "term" : {
      "points":32
    }
  }
}

- match : 단어가 포함되어 있으면 검색 ( 대/소문자 상관없음 )

GET basketball/_search
{
  "query" : {
    "match" : {
      "team":"States"
    }
  }
}

+ match에서 공백or를 의미한다.

GET basketball/_search
{
  "query" : {
    "match" : {
      "team":"states jazz"
    }
  }
}

+ match에서 and로 검색 : 공백 중간이나 앞, 뒤에 다른 단어가 와도 된다. ( 중간에 다른 단어가 끼어 있음 )

GET basketball/_search
{
  "query" : {
    "match" : {
      "team":{
        "query" : "states jazz",
        "operator" : "and"
      }
    }
  }
}

+ match_phrase : 제시한 검색어는 정확히 일치, 앞이나 뒤에 다른 단어가 와도 된다. ( 중간에 다른 단어가 끼지 않음 )

GET basketball/_search
{
  "query" : {
    "match_phrase" : {
      "team": "States Warriors"
    }
  }
}

+ slop 옵션 : 값의 공백 사이의 단어가 n개 이하의 단어가 들어와도 됨

GET basketball/_search
{
  "query" : {
    "match_phrase" : {
      "team": {
        "query":"States Warriors",
        "slop":1
      }
    }
  }
}

=> 0개, 1개까지는 들어와도 된다. 2개는 안됨

+ query_string : 여러 개의 검색 조건

GET basketball/_search{
    "query":{
        "query_string":{
            "default_field":"team", 
            "query": "(Golden AND jazz) OR \"Golden Warriors\""
        }
    }
}

+ Bool query : 여러 쿼리를 조합하여 사용 가능, 4개의 인자를 가지고 있음

  • must : 쿼리가 참인 문서들을 검색
  • must_not : 쿼리가 거짓인 문서들을 검색
  • should : 검색 결과 중 이 쿼리에 해당하는 문서들의 score를 높여줌
  • filter : 쿼리가 참인 문서를 검색하지만, score를 계산하지 않음 must보다 검색 속도가 빠르다

[사용법]

 GET 인덱스명/_search
 {
    "query":{
        "bool":{
            "must":[
                { 쿼리 }, ... 
            ],
            "must_not":[
            { 쿼리 }, ...
            ],
            "should":[
                { 쿼리 }, ...
            ],
            "filter":[
                { 쿼리 }, ...
            ]
        }
    }
 }

[예시01]

조건 - 팀이 jazz 이고, golden states 가 참인 것 ( 둘 다 참 )  golden states는 붙어있고, jazz는 들어가 있기만 하면 된다.

GET basketball/_search
 {
    "query":{
        "bool":{
            "must": [
                {"match" : {"team" : "jazz"}},
                {"match_phrase" : {"team" : "Golden States"}}
            ]
        }
    }
 }