ES 전자상거래 사이트 상품 관리: 클 러 스 터 건강 검진, 문서 CRUD
문서 지향 검색 분석 엔진
(1) 응용 시스템 의 데이터 구 조 는 모두 대상 을 대상 으로 하 는 것 이다. 복잡 한 (2) 대상 데 이 터 는 데이터베이스 에 저장 되 고 분해 만 할 수 있 으 며 평면 적 인 여러 장의 표 로 변 한다. 조회 할 때마다 대상 형식 을 복원 해 야 한다. 상당히 번거롭다 (3) ES 는 문 서 를 대상 으로 하 는 것 이다. 문서 에 저 장 된 데이터 구 조 는 대상 을 대상 으로 하 는 데이터 구조 와 같다.이러한 문서 데이터 구 조 를 바탕 으로 es 는 복잡 한 색인, 전체 텍스트 검색, 분석 집합 등 기능 (4) es 의 document 을 json 데이터 형식 으로 표현 할 수 있 습 니 다.
public class Employee {
private String email;
private String firstName;
private String lastName;
private EmployeeInfo info;
private Date joinDate;
}
private class EmployeeInfo {
private String bio; //
private Integer age;
private String[] interests; //
}
EmployeeInfo info = new EmployeeInfo();
info.setBio("curious and modest");
info.setAge(30);
info.setInterests(new String[]{"bike", "climb"});
Employee employee = new Employee();
employee.setEmail("[email protected]");
employee.setFirstName("san");
employee.setLastName("zhang");
employee.setInfo(info);
employee.setJoinDate(new Date());
employee : Employee , EmployeeInfo
데이터베이스 관계 형 데이터 형식
:employee ,employee_info , employee , Employee EmployeeInfo
employee :email,first_name,last_name,join_date,4
employee_info :bio,age,interests,3 ; , employee_id, employee
es 의 document 데이터 형식
{
"email": "[email protected]",
"first_name": "san",
"last_name": "zhang",
"info": {
"bio": "curious and modest",
"age": 30,
"interests": [ "bike", "climb" ]
},
"join_date": "2017/01/01"
}
위 는 es 의 document 데이터 형식 과 데이터 뱅 크 의 관계 형 데이터 형식 차이 입 니 다.
2. 전자상거래 사이트 상품 관리 사례 배경 소개
한 전자상거래 사이트 가 있 는데 ES 를 바탕 으로 백 스테이지 시스템 을 구축 하고 다음 과 같은 기능 을 제공 해 야 한다.
(1) 상품 정보 에 대한 CRUD (첨삭 개 검) 조작 (2) 간단 한 구조 화 조회 (3) 간단 한 전문 검색 을 수행 할 수 있 고 복잡 한 phrase (구문) 검색 (4) 전문 검색 결과 에 대해 하 이 라이트 디 스 플레이 (5) 데이터 에 대한 간단 한 취 합 분석 (6)현재 모든 것 은 es 의 restful api 로 es 의 모든 지식 점 과 기능 점 을 실현 하고 추 후 자바 api 를 사용 합 니 다.
3. 간단 한 클 러 스 터 관리
(1) 클 러 스 터 의 건강 상 태 를 신속하게 검사 하고 es 는 api 를 제공 합 니 다. cat api 라 고 하 는데 es 의 다양한 데 이 터 를 볼 수 있 습 니 다.
GET /_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1522762745 21:39:05 elasticsearch yellow 1 1 1 1 0 0 1 0 - 50.0%
어떻게 집단의 건강 상 태 를 신속하게 이해 합 니까?green、yellow、red?
green: 모든 색인 의 primary shard 와 replica shard 는 active 상태의 yellow 입 니 다. 모든 색인 의 primary shard 는 active 상태 이지 만 일부 replica shard 는 active 상태 가 아니 라 사용 할 수 없 는 상태 red 입 니 다. 모든 색인 의 primary shard 가 active 상태 가 아 닙 니 다. 일부 색인 은 데 이 터 를 잃 어 버 렸 습 니 다.
왜 지금 옐 로 우 상태 일 까요?
우 리 는 지금 노트북 하나 로 es 프로 세 스 를 시 작 했 습 니 다. 하나의 node 만 있 는 것 과 같 습 니 다.현재 es 에 index 가 하나 있 는데 바로 kibana 가 자체 적 으로 내장 하여 만 든 index 입 니 다.기본 설정 은 index 마다 primary shard 5 개 와 replica shard 5 개 를 할당 하 는 것 이 며, primary shard 와 replica shard 는 같은 기계 에 있 을 수 없습니다 (잘못 사용 하기 위해).현재 kibana 가 직접 만 든 index 는 primary shard 1 개 와 replica shard 1 개 입 니 다.현재 node 가 하나 있 기 때문에 primary shard 1 개 만 할당 되 고 작 동 되 었 습 니 다. 그러나 하나의 replica shard 는 두 번 째 기계 로 작 동 하지 않 습 니 다.
작은 실험 을 합 니 다. 이때 두 번 째 es 프로 세 스 를 시작 하면 es 클 러 스 터 에 node 가 2 개 있 고 그 다음 에 replica shard 는 자동 으로 분 배 됩 니 다. 그리고 cluster status 는 green 상태 가 됩 니 다.
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1522763492 21:51:32 elasticsearch green 2 2 2 1 0 0 0 0 - 100.0%
(2) 클 러 스 터 에 어떤 색인 이 있 는 지 빠르게 봅 니 다.
GET /_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana sny6Sj_JS6CaYEV079oAQg 1 1 1 0 3.1kb 3.1kb
index:
pri:primary shard
rep:replica shard
docs.count:document
docs.deleted:document
store.size:
pri.store.size:primary shard
(3) 간단 한 색인 작업
생 성 색인: PUT / testindex?prett
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana sny6Sj_JS6CaYEV079oAQg 1 1 1 0 3.1kb 3.1kb
yellow open test_index xev5PyVMTwCNt_LxwqFZWA 5 1 0 0 650b 650b
색인 삭제: DELETE / testindex?pretty
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana sny6Sj_JS6CaYEV079oAQg 1 1 1 0 3.1kb 3.1kb
4. 상품 의 CRUD 조작
(1) 신규 상품: 문서 추가, 색인 생 성
# :
PUT /index/type/id
{
"json "
}
# :
PUT /ecommerce/product/1
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
# :
{
"_index": "ecommerce", //
"_type": "product", //
"_id": "1",
"_version": 1, //
"result": "created", //
"_shards": { // shard
"total": 2, // 2 shard
"successful": 1, // 1 shard
"failed": 0
},
"created": true
}
PUT /ecommerce/product/2
{
"name" : "jiajieshi yagao",
"desc" : "youxiao fangzhu",
"price" : 25,
"producer" : "jiajieshi producer",
"tags": [ "fangzhu" ]
}
PUT /ecommerce/product/3
{
"name" : "zhonghua yagao",
"desc" : "caoben zhiwu",
"price" : 40,
"producer" : "zhonghua producer",
"tags": [ "qingxin" ]
}
es 는 index 와 type 을 자동 으로 만 듭 니 다. 미리 만 들 필요 가 없습니다. 또한 es 기본 값 은 document 의 모든 field 에 거꾸로 색인 을 만들어 검색 할 수 있 도록 합 니 다.
(2) 상품 조회: 문서 검색
#
GET /index/type/id
#
GET /ecommerce/product/1
#
{
"_index": "ecommerce",
"_type": "product",
"_id": "1",
"_version": 1,
"found": true, //
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
}
(3) 상품 수정: 문서 교체
#
PUT /ecommerce/product/1
{
"name" : "jiaqiangban gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
#
{
"_index": "ecommerce",
"_type": "product",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}
#
PUT /ecommerce/product/1
{
"name" : "jiaqiangban gaolujie yagao"
}
교체 방식 이 좋 지 않 습 니 다. 모든 field 를 가 져 가 야 정 보 를 수정 할 수 있 습 니 다.
(4) 상품 수정: 문서 업데이트
#
POST /ecommerce/product/1/_update
{
"doc": {
"name": "jiaqiangban gaolujie yagao"
}
}
#
{
"_index": "ecommerce",
"_type": "product",
"_id": "1",
"_version": 8,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
(5) 상품 삭제: 문서 삭제
#
DELETE /ecommerce/product/1
#
{
"found": true,
"_index": "ecommerce",
"_type": "product",
"_id": "1",
"_version": 9,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
#
{
"_index": "ecommerce",
"_type": "product",
"_id": "1",
"found": false
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.