간단한 탐색 ElasticSearch
현재 데이터 집합과 로그 수집 분야에서 매우 인기가 있다.
데이터 저장 개념
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"}}
위의 네 가지 작업만 지원
자, 전재가 끝났으니 스스로 실천해야겠어요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
{
"name": "Li",
"email": "[email protected]",
"info": {
"age": 24,
"height": 77
},
"join_date": "2018/12/12"
}
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"}}
위의 네 가지 작업만 지원
자, 전재가 끝났으니 스스로 실천해야겠어요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
{
"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 //
}
{
"found": true, //
"_index": "dev",
"_type": "emp",
"_id": "1",
"_version": 14,
"result": "deleted", //
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}
{
"_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"
}
}
{
"took": 15, //
"timed_out": false, //
"hits": {
"total": 1, //
"max_score": 1.2438203, //
"hits": [
{
"_score": 1.2438203, //
"_source": {
"name": " ",
"email": "[email protected]",
......
}
}
]
}
}
{
"query" : {
"match" : {
"email": "[email protected]"
}
}
}
{
"query" : {
"bool": {
"must": [{
"match" : {
"email": "@gmail.com"
}
}],
"filter": {
"range": {
"info.age": {
"gte": 21,
"lte": 22
}
}
}
}
}
}
{
"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
}
}
]
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.