ES 전자상거래 사이트 상품 관리: 클 러 스 터 건강 검진, 문서 CRUD

8857 단어
1. document 데이터 형식
문서 지향 검색 분석 엔진
(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
}

좋은 웹페이지 즐겨찾기