1월, 2018의 게시물 표시

(ElasticSearch) _id와 _routing의 이해

기본적으로 문서를 색인하기 위해서는 문서의 unique id가 필요하다. 엘라스틱 서치에서는 _id라는 필드를 이용해서 문서의 Uniqueness를 보장해 주고 있습니다. 이 값은 hash알고리즘을 이용해서 색인할 shard id를 생성합니다. 또한, _id값은 GET API를 이용해서 문서를 직접 access할 수 있게 해줍니다. $curl -XGET http://localhost:9200/INDEX/TYPE/_id _routing도 _id와 동일하게 해당 값을 이용해서 shard id를 구한다는 점에서 동일하며 mapping설정도 동일 합니다. 차이점이 있다면 _id는 문서 자체에 대한 routing이고, _routing는 문서 집단 또는 그룹에 대한 routing입니다. 또한 검색입장에서는 _id는 문서 하나를 검색해서 가져오지만, _routing은 지정된 key값에 의한 shard들을 대상으로 검색을 하게 됩니다. * _id가 1인 문서 검색 $curl -XGET http://localhost:9200/INDEX/TYPE/1 * _routing을 하나 만 지정한 문서 검색(routing값은 sports) $curl -XGET http://localhost:9200/_search?routing=sports --> sports에 해당하는 shard id가 0이라면 0번 shard로만 검색 질의가 실행됩니다. *_routing을 두 개 지정한 문서 검색(routing값은 sports, entertainment) $curl -XGET http://localhost:9200/_search?routing=sports,entertainment

(ElasticSearch) 쿼리 언어 소개

Elasticsearch는 쿼리 실행에 사용할 수 있도록 JSON 스타일의 도메인 전용 언어를 제공합니다. 예제) GET /bank/_search {   "query" : { "match_all" : {} } } match_all 쿼리는 지정된 색인의 모든 문서를 검색하는 것이다. query 매개변수 외에 다른 매개변수도 전달하여 검색 결과에 영향을 줄 수 있다. GET /bank/_search {  "query" : { "match_all" : {} },  "size" : 1 } 'size' 가 지정되지 않으면 기본값은 10이다. from 매개 변수는 (0기반)는 어떤 문서 색인에서 시작할지, size매개변수는 from 매개변수에서 시작하여 몇 개의 문서를 반환할지 지정합니다. 이 기능은 검색 결과의 페이징 구현에 유용합니다. from이 지정되지 않으면 기본값은 0입니다. GET /bank/_search {  "query" : { "match_all" : {} },  "sort" : { "balance": {"order" : "desc"}} }

(C++) 연산자오퍼레이터(::)

1. :: 범위 연산자 (scope operator) 이 연산자는 3가지 방식으로 사용된다. 첫번째, 전역변수명 일반적으로 전역변수와 지역변수의 이름이 동일한 경우 지역변수가 우선시 됩니다. 전역 변수가 지역변수에 의해 가려진다고 하는데요, 이런 경우에도 전역변수 사용이 가능합니다. #include<stdio.h> int ex = 1; int main() {  int ex = 2; ex + =2;   //동일 이름의 변수가 존재시 지역변수가 우선 ::ex += 1; // :: 연산자를 사용해 전역변수를 사용. retrun 0; } 두번째, class명 ::멤버 나중에 class쪽에서 자주 보겠지만 클래스나 구조체에서 만든 함수를 정의 할 때 사용됩니다. void Persion::prn() { } 세번째, ::외부함수 (전역함수) c에서는 함수가 main()이 아니면 사용자 함수(내가 정의한 함수)가 기본적이었는데, 클래스나 구조체에서는 함수를 정의하는게 존재하여 함수의 "소속"에 의미가 생겼다. 일반적으로 main() 밖에 사용자가 정의하던 그냥 "함수"를 "전역함수" 라고 한다. 다른 사용자 함수 어디서든 사용이 가능하기 때문이다. 클래스 안에서 만든 함수를 "멤버함수"라고 하는데, 이 "멤버함수" 와 "전역함수"는 함수명이 같아도 된다. 기존에 C에서는 함수명이 중복될 수 없다. 여기서는 오버로딩이라는 개념이 있긴한데, 그 개념이랑은 조금 다릅니다. 바로 "소속"이 다르기 때문이다. 전역함수는 어디에도 소속되지 않은 함수이다. 반면 멤버함수는 클래스 안에 속해있다. 그렇다 보니 멤버함수는 외부에서 단독으로 사용되지 못한다. 클래스명.멤버함수명 또는 클래스명::멤버함수명 으로 사용된다. 따라서 전역함수 prn()과 Per