설 연수
하하호홓
설 연수
전체 방문자
오늘
어제
  • 분류 전체보기 (231)
    • Back-End (2)
      • Java (20)
      • JSP (13)
      • Spring (18)
      • Kotlin (0)
      • node.js (0)
    • Front-End (68)
      • JavaScript (19)
      • jQuery (39)
      • Angular (4)
      • HTML (5)
    • Dev-Ops (12)
      • Linux, Cloud (5)
      • docker, k8s (5)
      • ElasticSeach (2)
    • Other (33)
      • OOP (3)
      • 알고리즘 (2)
      • DB (12)
      • Git (1)
      • Swift (4)
    • Backup (65)

블로그 메뉴

    공지사항

    인기 글

    태그

    • jquery invalid
    • Angular
    • Redis
    • 패스트캠퍼스
    • 크로스도메인
    • Kafka
    • docker
    • page not found
    • angular2
    • 404 error
    • MYSQL
    • flex
    • angular 콜백
    • mongodb
    • angular callback
    • jOOQ
    • RESTful
    • angular4
    • INVALID
    • CORS

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    설 연수

    하하호홓

    Dev-Ops/ElasticSeach

    엘라스틱서치 데이터검색 정리

    2020. 4. 30. 15:01

    엘라스틱서치 실무 가이드 : https://book.naver.com/bookdb/book_detail.nhn?bid=14733062


    1. 검색API Template

    {
      "size": "[페이징]몇개의 결과를 반환할지 결정한다(default: 10)",
      "from": "[페이징]어느 위치부터 반환할지 결정한다.(defalut: 0)",
      "timeout": "제한시간을 설정하여 제한시간까지 조회된 문서만 조회한다.(default: 무한대)",
      "_source": {
        // 특정필드만 결과로 반환받고 싶을때 정의한다
      },
      "sort": {
        // 특정필드를 기준으로 정렬할지 정의한다
      },
      "query": {
        /*
         * [전문검색]
         * 검색될 조건을 정의한다.
         * 분석기에 의해 분석.
         */
      },
      "filter": {
        /*
         * [조건검색]
         * 검색 결과 중 특정한 값을 다시 보여준다
         * 결과 내에서 재검색 때 사용하는 기능 중 하나다.
         * 다만 필터를 사용하게 되면 자동으로 score 값이 정렬되지 않는다.
         * (_score 정렬을 추가하면 가능하다.)
         */
      },
      "aggs": {
        // 통계 또는 집계데이터 사용시 정의한다.
      }
    }

    2. 검색 파라메터

    2.1 Multi Index검색

    # 특정인덱스 정의
    POST [인덱스1],[인덱스2]/_search
    
    # *(와일드카드) 사용
    POST [인덱스명]*/_search

    2.2 범위검색

    문법 연산자
    lt <
    gt >
    lte <=
    gte >=
    POST [인덱스]/_search
    {
        "query": {
            "range": {
                "필드명": {
                    "gte": "2016", // >= 2016
                    "lte": "2017"  // <= 2017
                }
            }
        }
    }

    2.3 operator

    • AND조회
    POST [인덱스]/_search
    {
        "query": {
            "match": {
                "필드명": {
                    "query": "자전차왕 엄복동",
                    "operator": "and"
                }
            }
        }
    }
    
    /*
    OR연산 결과
        자전차왕 엄복동
        자전차왕 홍길동
        오토바이왕 엄복동
        ....
    AND연산 결과
        자전차왕 엄복동
        자전차왕 엄복동 김복동
        ...
    */

    2.4 minimum_should_match

    • 매치 최소개수 지정

    2.5 boost

    • 특정필드에 가중치 부여하여 score을 높이고 상위에 노출하도록 함

    3. 문자열 검색

    match와 term의 차이

    query 필드 타입 설명
    match text 쿼리를 수행하기전에 분석기를 통해 텍스트르 분석한 후 검색을 수행. text 데이터타입을 검색할때 match를 사용.
    term keyword 별도의 분석작업을 수행하지않고 입력된 텍스트가 존재하는 문서를 찾음. keyword 데이터타입을 검색할때 term를 사용.
    query_string - 엘라스틱서치에 내장된 쿼리분석기로 검색.

    3.1 match

    3.1.1 match_all

    • 색인된 모든문서 조회
    POST [인덱스]/_search
    {
      "query": {
        "match_all": {}
      }
    }

    3.1.2 match / multi_match

    • 문장을 형태소 분석을 통해 텀으로 분리 후 텀으로 검색질의 수행.
    • 검색어가 분석되야 할 경우 사용한다.
    POST [인덱스]/_search
    {
      "query": {
        "match": {
          "[필드]": "[검색할 키워드]"
        }
      }
    }
    
    POST [인덱스]/_search
    {
      "query": {
        "multi_match": {
          "query": "[검색할 키워드]",
          "fields": ["[필드1]", "[필드2]"]
        }
      }
    }

    3.2 term

    • 정확히 매칭되지않거나, 대소문자가 다른경우 조회되지 않음.
    POST [인덱스]/_search
    {
      "query": {
        "term": {
          "[필드]": "[검색할 키워드]"
        }
      }
    }

    3.3 query_string

    • 엘라스틱서치에 기본적으로 내장된 쿼리분석기로 검색
    // 전체검색
    POST [인덱스]/_search
    {
      "query": {
        "query_string": {
          "query": "[검색할 키워드]"
        }
      }
    }
    
    // 필드검색
    POST [인덱스]/_search
    {
      "query": {
        "query_string": {
          "default_field": "[필드명]",
          "query": "[검색할 키워드]"
        }
      }
    }

    4. 조건검색

    4.1 bool

    • AND, OR, IN 조건을 설정한다.
    ElasticSearch SQL
    must: [필드] AND [컬럼] = [조건]
    must_not: [필드] AND [컬럼] != [조건]
    should: [필드] OR [컬럼] = [조건]
    filter: [필드] [컬럼] IN ( [조건] )
    조건 :
        장르 = '코미디'
    AND 국가 = '한국'
    AND 타입 != '단편'
    
    POST [인덱스]/_search
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "term": {
                            "장르": "코미디"
                        }
                    },
                    {
                        "match": {
                            "국가": "한국"
                        }
                    }
                ],
                "must_not": [
                    {
                        "match": {
                            "타입": "단편"
                        }
                    }
                ]
            }
        }
    }

    5. 그외..

    5.1 Prefix Query

    • 접두어가 있는 문서를 검색하고자 할때

    5.2 Exists Query

    • 실제 값이 존재하는 문서만 찾고싶을때.

    5.3 Wildcard Query

    • 와일드카드와 일치하는 구문을 찾는다.

    5.4 Nested Query

    • 부모자식 관계 형태(Object)의 데이터타입인 Nested타입 필드 검색할때 사용.

    5.5 Multi Search API

    • 여러건의 검색을 한번에 요청할때
    POST _msearch
    {"index" : "[인덱스1]"}
    {
        "query" : {
            // 조건
        },
        "from": 0,
        "size": 10
    }
    {"index" : "[인덱스2]"}
    {
        "query" : {
            // 조건
        },
        "from": 0,
        "size": 10
    }

    5.6 Count API

    • 문서 개수 조회
    POST [인덱스]/_count
    {
        "query" : {
            // 조건
        }
    }

    5.7 Explain API (_score)

    • _score값이 어떻게 계산된것인지 확인하고싶을때 사용.

    5.8 Profile API (튜닝/디버깅)

    • 쿼리에 대한 상세한 수행계획과 수행계획별 수행된 시간 조회.

    'Dev-Ops > ElasticSeach' 카테고리의 다른 글

    엘라스틱서치 필드 데이터타입 종류  (0) 2020.04.30
      'Dev-Ops/ElasticSeach' 카테고리의 다른 글
      • 엘라스틱서치 필드 데이터타입 종류
      설 연수
      설 연수

      티스토리툴바