간단한 탐색 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
또는 DELETE
PROTOCOL
기본 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
또는 DELETE
PROTOCOL 기본 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에 따라 라이센스가 부여됩니다.