간단한 탐색 ElasticSearch

8255 단어
분포식, 확장 가능, 실시간 전문 검색 및 데이터 분석 엔진그것은 프로젝트 초기부터 검색, 분석, 탐색 능력을 부여할 수 있다.전문 검색, 구조화 검색, 데이터 분석, 복잡한 언어 처리, 지리적 위치와 대상 간의 관련 관계 처리 등 기능을 제공하여 매우 강력하다.
현재 데이터 집합과 로그 수집 분야에서 매우 인기가 있다.

데이터 저장 개념


ES가 데이터에 대한 몇 가지 개념: , , , ES는 천성적으로 분포식, 집단화된 시스템이다.
문서는 ES에서 사용자 객체와 같은 데이터 단위입니다.
{
    "name": "Li",

    "email": "[email protected]",

    "info": {

        "age": 24,

        "height": 77
    },

    "join_date": "2018/12/12"

}

문서
색인과 유형은 문서로 이동하는 데 필요한 경로입니다.
ES 및 SQl 클래스 데이터베이스의 데이터 수준 관계는 다음과 같습니다.
DB→Databases→표(Tables)→행(Rows)→열(Columns)
ES → 색인(Indices)→유형(Types) → 문서(Documents) → 필드(Fields)

상호 작용


ES는 기본적으로 두 개의 포트 9200과 93009200을 제공하고 RESTful 스타일의 API 인터페이스를 제공하며 9300은 TCP 상호작용을 사용한다
우리는 일반 조회 요청을 집단 내의 어느 노드에 제출해도 같은 결과를 얻을 수 있다.
정부에서 몇 개 언어의 클라이언트를 제공하였다https://www.elastic.co/guide/en/elasticsearch/client/index.html
클라이언트의 선택에 있어 9300 포트의 TCP 클라이언트는 9200의 RESTful 포트보다 성능이 높지만 이 클라이언트는 매우 방대하다. 그는 하나의 노드를 시작하여 그룹에 가입하고 심지어 이 노드를 설정하여 데이터를 저장하여 노드로 그룹에 참여할 수 있다.일반적인 상황에서 RESTful을 사용해야 하는 클라이언트는 공식적으로 5.6버전에서 High RESTful Client를 제공하여 기존의 RESTful 클라이언트를 포장했다.
ES는 자체 생태 체인을 가지고 있는데 그 중에서 키바나는 집합 패널로 광범위하게 사용된다.
우리는 Kibana를 컨트롤러로 사용해서 ES를 어떻게 사용하는지 알 수 있다. 비록 큰 인재는 소용없지만.

RESTful API 베이스 샘플


이런 방식을 사용하기 때문에 요청을 구성하는 프로토콜은 HTTP이기 때문에, 우리는curl이라는 도구를 사용하여 요청을 시작할 수 있다
curl -X '://:/?' -d ''
<>에 표시된 부품:
Tables
Are
VERB
적절한 HTTP 방법: GET, POST, PUT, HEAD 또는 DELETEPROTOCOL
기본 http, https 에이전트가 있으면 https
HOST
ES 클러스터의 모든 노드에 대한 호스트 이름
PORT
ES HTTP 서비스를 실행하는 포트 번호입니다. 기본값은 9200입니다.
PATH
API의 터미널 경로입니다(예: count는 클러스터의 문서 수를 반환).Path에는 다음과 같은 여러 구성 요소가 포함될 수 있습니다.cluster/stats 및nodes/stats/jvm .
QUERY_STRING
선택 가능한 검색 문자열 매개 변수(예:?pretty는 JSON 반환 값을 보다 쉽게 읽을 수 있도록 포맷화함)
BODY
선택 사항: 하나의 JSON 형식의 요청체
API 요청은 HTTP 상태 코드와 결과 json 열을 반환합니다.
예를 들어 ES의 문서 수량 조회
curl -XGET 'http://localhost:9200/_count?pretty' -d '
{

 "query": {

 "match_all": {}

 }

}

위의 URL은 Kibana 및 RESTful 클라이언트에서
GET _count?pretty
그중에서pretty는 되돌아오는 json을 위해 식별하기 쉬울 뿐입니다.
다음과 같은 내용이 반환됩니다.
{

  "count": 3,

  "_shards": {

    "total": 11,

    "successful": 11,

    "failed": 0

  }

}

http 상태 코드를 보려면curl에 - i 파라미터를 추가하여 요청 헤더를 인쇄하십시오.

기본 문서 작업


CRUD


추가 (insert), 수정 (업데이트) 추가 (insert), 수정 (업데이트)


put/dev/emp/1
{

    "name": "Li",

    "email": "[email protected]",

    "info": {

        "age": 24,

        "height": 77

    },

    "join_date": "2018/12/21"

}
{

  "_index": "dev", //  

  "_type": "emp", //  

  "_id": "1",

  "_version": 1, //  , 

  "result": "created", //  , update

  "_shards": {

    "total": 2,

    "successful": 2,

    "failed": 0

  },

  "created": true //  

}

삭제


delete/dev/emp/4
{

  "found": true, //  

  "_index": "dev",

  "_type": "emp",

  "_id": "1",

  "_version": 14,

  "result": "deleted", //  

  "_shards": {

    "total": 2,

    "successful": 2,

    "failed": 0

  }

}

조회


get///

id 지정


get/dev/emp/1
{

  "_index": "dev", //  

  "_type": "emp", //  

  "_id": "1", //id

  "_version": 8, //  

  "found": true, //  

  "_source": { //  

    "name": "zhou",

    "email": "[email protected]",

    "info": {

      "age": 24,

      "height": 77

    },

    "join_date": "2017/11/03"

  }

}

_search

_search 이 유형의 10개의 데이터를 표시합니다 (기본값은 10개만 표시됩니다)
조건을 추가할 수 있습니다.
간단한 사용:
get/dev/emp/_search?q=email:”[email protected]
q: query-string
이 조회는 아래의 그것과 같다.결과는 이미 현재 중요하지 않은 몇 가지 데이터를 제거했다
{

  "took": 15, //  

  "timed_out": false, //  

  "hits": {

    "total": 1, //  

    "max_score": 1.2438203, //  

    "hits": [

      {

        "_score": 1.2438203, //  

        "_source": {

          "name": " ",

          "email": "[email protected]",

            ......

        }

      }

    ]

  }

}

복잡한 사용:
두 가지 조회가 있습니다.query DSL과 Filters. 여기는query를 사용합니다.
query 조회는 일치 정도를 평가하여 _score, 즉 전문 검색을 얻어낸다.
filter 필터는 간단하고 거칠며, 부합되는 것만 있고 부합되지 않는 것만 있으며, 이것은 전통적인 데이터베이스와 같다match 기본 쿼리
GET/dev/emp/_search
{

    "query" : {

        "match" : {

            "email": "[email protected]"

        }

    }

}

이 예에서 다음 m를 삭제하면 일치하지 않습니다. 조건을 이렇게 바꾸면"email": "@abc.com @gmail.com"
그러면 두 가지 메일박스 접미사 항목을 조회할 수 있어요.
GET/dev/emp/_search
{

  "query" : {

    "bool": {

      "must": [{

          "match" : {

            "email": "@gmail.com"

          }

        }],

      "filter": {

        "range": {

          "info.age": {

            "gte": 21,

            "lte": 22

          }

        }

      }

    }

  }

}

복잡한 조합 조회
bool 필터, 내부에 must, must_not를 사용하여 서브 조회를 수식해야 합니다
range 범위 필터, gte: great than (정확하지 않음)
데이터 집합
유사group by, 통계 데이터
GET/dev/emp/_search
{

  "query" : {

      "match" : {

          "email": "@abc.com @gmail.com"

      }

  },

  "aggs": { //  , , type 

    "NAME": { //  

      "terms": { //  

        "field": "info.age",

        "size": 10

      },

      "aggs": { //  , , info.height 

        "avg_height": {

          "avg": {

            "field": "info.height"

          }

        }

      }

    }

  }

}
{

  "aggregations": {

    "NAME": {

      "doc_count_error_upper_bound": 0,

      "sum_other_doc_count": 0,

      "buckets": [ 

        {

          "key": 22,

          "doc_count": 4,

          "avg_height": {

            "value": 75

          }

        },

        {

          "key": 21,

          "doc_count": 3,

          "avg_height": {

            "value": 71.33

          }

        }

      ]

    }

  }

}

문서가 있는지 확인


head/dev/emp/1
HTTP 200 존재
HTTP 404가 없습니다.

대량 작업


_bulk 방법
POST/_bulk
{ "delete": { "_index": "website", "_type": "blog", "_id": "123"}}
{ "create": { "_index": "website", "_type": "blog", "_id": "123"}}
{ "title": "My first blog post"}
{ "index": { "_index": "website", "_type": "blog"}}
{ "title": "My second blog post"}
{ "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict": 3} }
{ "doc": {"title": "My updated blog post"}}
위의 네 가지 작업만 지원
자, 전재가 끝났으니 스스로 실천해야겠어요.

좋은 웹페이지 즐겨찾기