elasticsearch 문서

3550 단어

elasticsearch 문서


문서 형식


색인에서 가장 기본적인 단원을 문서document라고 합니다.es에서 문서의 예는 다음과 같습니다.
{
    "_index": "questions",
    "_type": "baichebao",
    "_id": "4",
    "_score": 1,
    "_version" : 1,
    "_source": {
            "id": 4,
            "content": " ?",
            "uid": 1,
            "all_answer_count": 2,
            "series_id": 0,
            "score": 0,
            "answer_count": 2
        }
}

문서에서 밑줄로 시작하는 것은 es 자체 필드입니다.
  • _인덱스는 인덱스 이름을 대표합니다
  • _type은 유형을 나타냅니다
  • _id는 문서 id를 대표합니다. 만약 문서를 삽입할 때 id를 설정하지 않으면es는 자동으로 유일한 id를 생성합니다
  • _score 이것은 문서가 가지고 있는 것이 아니라 검색을 할 때 되돌아오는 것입니다. 이 문서와 검색의 관련 일치 점수를 나타냅니다
  • _소스는 원본 텍스트와 분류된 필드를 저장합니다
  • _버전은 이 문서의 버전을 대표합니다

  • 이곳의 색인, 유형, 문서, 필드의 개념은 많은 문장들이 관계형 데이터의 대비를 한다.
    저는 지금 사용자 테이블이 하나 있습니다. 이 사용자 테이블은 type 필드가 있습니다. 0/1은 남자인지 여자인지를 대표합니다. 이 테이블의 모든 데이터는 한 사람을 대표합니다. 이 테이블은 이름, 전화 등 속성을 가지고 있습니다.
    es에 대응하면 표는 색인에 해당하고 남녀의 필드는 type에 해당하며 모든 데이터는 하나의 문서이고 명칭 전화 등 속성은 하나의 필드이다.

    버전 제어


    위에서 볼 수 있는es의 문서 중_버전 필드, 두 개의 동시 요청이 문서를 수정할 때es는 낙관적인 자물쇠를 사용합니다.es에서 업데이트 요청은 사실상 두 단계로 나뉘어 문서를 가져오고 수정한 다음에 문서를 저장합니다.그러면 두 개의 업데이트 요청이 동시에 문서를 수정해야 할 때 시스템은 두 개의 동시 요청이 한 시스템에 대한 조작이 없을 것이라고 낙관한다.
    문서의 원래 버전은 1입니다. 요청 A는version이 1인 문서를 가져갔고, 요청 B도version이 1인 문서를 가져갔으며, 요청 A가 문서를 수정한 후에 저장 작업을 먼저 수행했습니다. 이때 시스템의 문서version은 2로 바뀌었습니다.이때 B가 저장 작업을 다시 실행할 때 시스템에version이 1인 문서를 수정해야 한다고 알려 줍니다.문서 버전이 일치하지 않는다고 오류가 발생합니다.그리고 이 오류는 응용 프로그램이 스스로 제어합니다.
    이런 메커니즘은 요청량이 많을 때 비관적 잠금 메커니즘보다 좋다.그러나 단점은 프로그램이 버전 충돌 오류를 처리해야 한다는 것이다. 일반적인 방법은 업데이트 작업을 봉인하고 중복 재시도 횟수를 설정하는 것이다.

    삭제 수정 작업


    증가:

    POST /website/blog/ -d
    {
        id: 123,
        name: "blog123"
    }

    추가 작업 문서가 이미 존재하면 409 오류가 반환됩니다

    삭제:

    DELETE /website/blog/123

    문서가 존재하지 않으면 404로 돌아갑니다.

    업데이트:

    PUT /website/blog/123
    {
      "title": "My first blog entry",
      "text":  "I am starting to get the hang of this...",
      "date":  "2014/01/02"
    }

    업데이트할 때 종종 "데이터가 있으면 업데이트하고, 데이터가 없으면 만들기"는 upsert를 사용할 수 있다
    curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
        "script" : "ctx._source.counter += count",
        "params" : {
            "count" : 4
        },
        "upsert" : {
            "counter" : 1   //  id 1 , , counter 1
        }
    }'
    
    
    curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
        "doc" : {
            "name" : "new_name"
        },
        "doc_as_upsert" : true  //  , doc 
    }'

    업데이트가 명확한 점은 es의 문서 업데이트 작업이 실제로 두 단계를 수행하여 문서를 가져오고 업데이트한 후에 문서를 저장하는 것이다.

    조사:

    GET /website/blog/123

    만약 당신이 이미 문서 id를 알고 있다면, 대량 검색 기능을 사용할 수 있습니다
    GET /_mget
    {
       "docs" : [
          {
             "_index" : "website",
             "_type" :  "blog",
             "_id" :    2
          },
          {
             "_index" : "website",
             "_type" :  "pageviews",
             "_id" :    1,
             "_source": "views"
          }
       ]
    }

    좋은 웹페이지 즐겨찾기