2. Elasticsearch 6가지 검색 방식

29147 단어 Elasticsearch
검색 결과 설명
  • took - 소모 밀리초
  • time_out - 시간 초과 여부
  • _shards - 데이터 분할 상황
  • hits.total - 조회 결과의 수량
  • hits.max_score-document는 하나의 검색 관련도 일치 점수에 대해 관련 점수가 높을수록
  • hits.hits - 일치하는document 상세 데이터
  • query string search

  • 구문
  • GET /index/type/_search
    

    모든 상품을 조회하다

    GET /ecommerce/product/_search
    {
        "took": 0,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 3,
                "relation": "eq"
            },
            "max_score": 1,
            "hits": [
                {
                    "_index": "ecommerce",
                    "_type": "product",
                    "_id": "1",
                    "_score": 1,
                    "_source": {
                        "name": "gaolujie yagao",
                        "desc": "gaoxiao meibai",
                        "price": 30,
                        "producer": "gaolujie producer",
                        "tags": [
                            "meibai",
                            "fangzhu"
                        ]
                    }
                }
            ...
            ]
        }
    }
    

    조건 조회 정렬


    상품 명칭에 포함된 yagao 상품을 조회하고 판매 가격의 하락 순서에 따라 정렬하다
    GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
    

    query DSL [일반]


    Domain Specified Language: 특정 영역의 언어
  • 구문
  • GET /index/type/_search
    {
        "query": {
            "match_all": {}
        }
    }
    

    요청체는 request body 안에 넣고 json 형식으로 각종 복잡한 문법을 구축할 수 있으며 query string search보다 강하다

    모든 상품 조회

    GET /ecommerce/product/_search
    {
        "query": {
            "match_all": {}
        }
    }
    

    조건 조회 정렬


    상품 명칭에 포함된 yagao 상품을 조회하고 판매 가격의 하락 순서에 따라 정렬하다
    GET /ecommerce/product/_search
    {
        "query": {
            "match": {
                "name": "yagao"
            }
        },
        "sort": [
            {
                "price": "desc"
            }
        ]
    }
    

    페이지별 조회


    현재 총 3개의 상품 데이터, 매 페이지에 1개, 현재 2페이지를 표시한다고 가정하면 두 번째 상품만 찾아낸다
    GET /ecommerce/product/_search
    {
      "query":{
        "match_all": {}
      },
      "from": 1,
      "size": 1
    }
    

    질의 지정 속성


    상품만name,price 속성을 지정합니다
    GET /ecommerce/product/_search
    {
        "query": {
            "match_all": {}
        },
        "_source": [
            "name",
            "price"
        ]
    }
    

    query filter


    범위 조회


    검색 상품 명칭에는 야오가오가 포함되어 있으며, 판매 가격이 25위안 이상인 상품이 포함되어 있다
    GET /ecommerce/product/_search
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "name": "yagao"
                        }
                    }
                ],
                "filter": {
                    "range": {
                        "price": {
                            "gt": 25
                        }
                    }
                }
            }
        }
    }
    
  • gt: 크게
  • lt: 작음
  • eq: 동일
  • ne: 같지 않음
  • gte: 같음
  • lte: 작음
  • full-text search


    전체 텍스트 검색 - 입력한 을 분해하여 색인을 거꾸로 배열하여 일치하게 합니다. 임의의 분해된 단어만 일치하면 결과로 되돌아갈 수 있습니다.
  • 데이터 1개 추가
  • PUT /ecommerce/product/4
    {
        "name": "special yagao",
        "desc": "special meibai",
        "price": 50,
        "producer": "special yagao producer",
        "tag": [
            "meibai"
        ]
    }
    
  • 쿼리producer
  • GET /ecommerce/product/_search
    {
      "query":{
        "match": {
          "producer":"yagao producer"
        }
      }
    }
    
  • 조회 결과 전시
  • {
        "took": 2,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 4,
                "relation": "eq"
            },
            "max_score": 1.2825179,
            "hits": [
                {
                    "_index": "ecommerce",
                    "_type": "product",
                    "_id": "4",
                    "_score": 1.2825179,
                    "_source": {
                        "name": "special yagao",
                        "desc": "special meibai",
                        "price": 50,
                        "producer": "special yagao producer",
                        "tag": [
                            "meibai"
                        ]
                    }
                },
                {
                    "_index": "ecommerce",
                    "_type": "product",
                    "_id": "3",
                    "_score": 0.09037233,
                    "_source": {
                        "name": "zhonghua yagao",
                        "desc": "caoben zhiwu",
                        "price": 40,
                        "producer": "zhonghua producer",
                        "tags": [
                            "qingxin",
                            "fangzhu"
                        ]
                    }
                },
                {
                    "_index": "ecommerce",
                    "_type": "product",
                    "_id": "2",
                    "_score": 0.09037233,
                    "_source": {
                        "name": "jiajieshi yagao",
                        "desc": "youxiao fangzhu",
                        "price": 25,
                        "producer": "jiajieshi producer",
                        "tags": [
                            "fangzhu"
                        ]
                    }
                },
                {
                    "_index": "ecommerce",
                    "_type": "product",
                    "_id": "1",
                    "_score": 0.09037233,
                    "_source": {
                        "name": "gaolujie yagao",
                        "desc": "gaoxiao meibai",
                        "price": 30,
                        "producer": "gaolujie producer",
                        "tags": [
                            "name"
                        ]
                    }
                }
            ]
        }
    }
    
    yagao producer이 조회 조건일 때 yagao, producer 두 개의 조회 조건으로 분할되지만, 조회 결과의 _score는 원시 조회 조건과 일치도를 나타낸다

    phrase search


    구문 검색 - 전체 텍스트 검색과 반대로 검색 은 지정된 필드 텍스트와 일치해야 합니다.
    GET /ecommerce/product/_search
    {
        "query": {
            "match_phrase": {
                "producer": "yagao producer"
            }
        }
    }
    

    highlight search


    강조 검색 - 일치하는 키워드가 검색 결과에 강조 표시됩니다. (기본값)
    GET /ecommerce/product/_search
    {
        "query": {
            "match": {
                "producer": "producer"
            }
        },
        "highlight": {
            "fields": {
                "producer": {}
            }
        }
    }
    

    좋은 웹페이지 즐겨찾기