Elastic Search 사용 소결

4059 단어 elasticsearch
앞 에 쓰다
저장 과 조 회 를 포함 하여 메타 데이터 서 비 스 를 해 야 합 니 다.메타 데 이 터 는 일부 기본 필드 를 제외 하고 다른 형식 은 자 유 롭 고 저장 입력 은 하나의JSON형식 이다.예 를 들 어 다음은 파일 대상 의 메타 데이터 입 니 다.
{
    "name":"myfile",
    "type":"file",
    "user":"ubuntu"
    "path":"node00:/path/to/file"
}

다음은 데이터 시트 의 메타 데 이 터 를 나타 내 는 것 입 니 다.
{
    "name":"mytable",
    "type":"table",
    "user":"ubuntu"
    "location":"node00:mysqldb.table_fake",
    "schema":["name","age","address"]
}

입력 형식 이 가 변 적 이 고JSON형식 으로 표시 되 기 때문에 시스템 내 에 유형 정의 가 있 고 각 필드 의 수치 유형 을 설명 하지만LIST이나OBJECT같은 MySQL 을 억지로 사용 하 는 것 은 매우 피곤 하 다(구 체표 에 있 는 필드 에 코드 를 수 동 으로 작성 해 야 한다).이것 은 본질 적 으로JSON대상 의 입력 은 차원 형식 이 고 관계 형 데 이 터 는 MySQL 의 데이터 테이블 식 2 차원 평면 형식 과 같다.
키-value 만 저장 하면 MongoDB 를 사용 하면 좋 을 것 같 습 니 다.완전한 schema free 이 고 기본 적 인 조회 도 지원 합 니 다.그러나 이 메타 데이터 서 비 스 는 검색 기능 도 제공 해 야 한다.일반적으로 이러한 검색 기능 을 실현 하 는 것 은 비교적 번 거 로 운 일이 다.특히 모호 한 조 회 를 지원 해 야 한다.일반적으로 모호 한 조회 가 대규모 데이터 세트 에서 비교적 좋 은 조회 효율 을 얻 으 려 면 후진 색인 을 만들어 야 한다.이 방면 에서 MongoDB 도 지 원 했 지만 나중에 사용 한 Elastic Search 는 조회 기능 이 비교적 약 해 졌 다.사실 처음에 저 는 거 절 했 습 니 다.ES 는 검색 을 하 는 것 이 라 고 생각 했 습 니 다.상대 적 으로 업무 저장 과 같은 실시 간 요구 가 높 은 저장 소 를 하 는 데 적합 하지 않 았 습 니 다.하지만 검색 필터 와 집계 기능 을 제공 하 는 것 은 정말 시원 하 다.더 이상 검색 조합의 SQL 을 쓰 는 데 애 쓰 지 않 아 도 된다.하지만 데이터 저장 에 있어 서 는 확실히 MongoDB 보다 훨씬 번거롭다.
색인 계층
어떤 조회 도 폭력 검색 보다 좋 은 성능 을 제공 하려 면 색인 을 사용 해 야 한다.ES 는 당연히 예외 일 수 없다.한편,ES 의 이름Index은 우리 가 말 한 색인 과 약간 다 릅 니 다.이것 은 일련의 필드 의 색인 집합 을 나타 내 는 것 이지 특정한 필드 의 단일 색인 이 아 닙 니 다.ES 의 저장 소 는 문 서 를 위 한 것 이기 때문에Index문서 에 대한 색인 을 의미 합 니 다.ES 의Index아래 에 서로 다른Type이 있 고 서로 다른 문서 유형 에 대응 할 수 있다.
데이터 매 핑
서로 다른 문서 형식(Type)은 입력 한 JSON 의 데 이 터 를 지정 한 형식 으로 매 핑 할 수 있 습 니 다.이 과정 은 기본적으로 자동 으로 진행 된다.예 를 들 어 다음 데 이 터 를 입력 하 십시오.
{"name":"ip-tables", "description":"linux firewall", "version":4}

그러면 name 과 description 필드 는 자동 으로 문자열 형식 으로 판별 되 고 단어 거꾸로 배열 되 며,version 은 정수 형식 으로 api 를 통 해 현재 색인 의 mappings 를 조회 할 수 있 습 니 다.
$ curl  -XPOST '10.214.208.138:9200/mass/demo' -d'{"name":"ip-tables","description":"linux firewall", "version":4}'
$ curl  '10.214.208.138:9200/mass/_mappings?pretty'
{
  "mass" : {
    "mappings" : {
      "demo" : {
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "version" : {
            "type" : "long"
          }
        }
      }
    }
  }
}

사용자 정의 매 핑
json 데 이 터 를 제출 하면 mapping 을 생 성 할 수 있 을 뿐만 아니 라 미리 지정 할 수 있 습 니 다.
$ curl  -XDELETE '10.214.208.138:9200/mass'
$ curl  -XPOST '10.214.208.138:9200/mass'

$ curl  -XPUT '10.214.208.138:9200/mass/_mappings/fruit' -d'{"fruit":{"properties":{"name":{"type":"string", "index":"not_analyzed"}}}}'

단어 제어
일부 필드 는 텍스트 형식 이지 만 우 리 는 단어 과정 을 사용 하고 싶 지 않 습 니 다.예 를 들 어 매 거 진 필드 와 같은 정확 한 조회 만 할 수 있 기 때 문 입 니 다.지정 가능index:not_analyzed.
필드 무시
사실 이 기능 은 제 가 한참 동안 찾 았 습 니 다.이러한 수요 가 있 기 때문에 JSON 필드 의 일부 메타 데 이 터 를 저장 하면 되 고 색인 과 조회 가 필요 하지 않 습 니 다.ES 는 기본적으로 보 이 는 모든 필드 를 매 핑 합 니 다.귀 찮 습 니 다.색인 필드 를 설정 하 는dynamic매개 변 수 를 통 해 이 루어 집 니 다.false일 때 기 존 mapping 에 해당 하 는 맵 규칙 이 없 는 필드 를 무시 할 수 있 습 니 다.그러나 이 문 서 는_source필드 에 저 장 됩 니 다.true일 때 자동 으로 작 동 하 는 형식 으로 맵 을 표시 하고 현재 mapping 을 업데이트 합 니 다.strict로 지정 할 수 있 습 니 다.이때 제출 한 것 과 미리 설 정 된 mapping 이 일치 하지 않 으 면 제출 을 거부 합 니 다.

좋은 웹페이지 즐겨찾기