목록2023/12/08 (6)
나의 개발일지
Elasticsearch를 설정하는 방법 2가지 1. 공식 사이트에서 다운받아 실행 2. docker이미지 사용 나는 docker이미지를 사용하는 방식으로 구현해보겠다. Docker에 Elasticsearch image 다운 $ docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.1 image 설치 확인 $ docker images 컨테이너 구동 docker run —name [붙여줄컨테이너이름] -e [환경변수지정] -d(프로세스를 백그라운드로 실행한다는 의미) -p [포트정보] 실행할 이미지 정보까지 입력 $ docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --n..
ES는 인덱스에 도큐먼트를 추가하면 자동으로 매핑이 생성됨. 집어넣은 데이터의 도큐먼트 모양에 따라 다양한 매핑들이 생성. Mapping은 RDB의 스키마(속성)라고 생각. GET [인덱스명] //setting, mapping정보 다 볼 수 있음. GET [인덱스명]/_mapping // mapping 정보만 확인 가능. 매핑 정의 데이터가 입력되어 자동으로 매핑 생성되기 전에 미리 먼저 인덱스의 매핑을 정의해놓으면 정의 해놓은 매핑에 맞추어 데이터가 입력됨. PUT { "mappings": { "properties": { "":{ "type": "" … } … } } } 이미 만들어진 매핑에 필드 추가는 가능 PUT /_mapping { "properties": { "": { "type": "" … }..
풀텍스트 검색을 하기 위해서는 데이터를 검색에 맞게 가공해야함. ES는 데이터를 저장하는 과정에서 가공작업을 처리. ES는 데이터를 저장할 때 역 인덱스(Inverted Index) 방식으로 저장 > RDB에서 데이터를 찾을 때 RDB는 테이블 구조로 데이터를 저장하여 텍스트를 찾으려면 한 줄씩 like문을 이용해서 찾음. -> 데이터가 늘어날 수록 검색해야 할 대상이 늘어 효율성이 떨어짐. -> Row안의 모든 내용을 읽어야 하기 때문에 기본적으로 속도가 느림 > Elastic Search에서 데이터 저장 각 문장의 단어를 하나하나 쪼개서 단어가 어떤 도큐먼트에 있는지 가리키는 인덱스를 만듦. 추출된 각 키워드를 텀(Term)이라고 부름. 역인덱스가 있으면 해당 단어를 포함하는 도큐먼트의 id를 바로 ..
query_string 쿼리는 여러 조건을 조합하기 좋지만 옵션이 한정되어있음. Data Body 검색에서 여러 쿼리를 조합하기 위해서는 상위에 bool 쿼리를 사용하고 그 안에 다른 쿼리들을 넣어 사용 가능. bool 쿼리는 다음의 4개 인자를 가지고 있고 그 인자 안에 다른 쿼리들을 배열로 넣는 형식으로 동작. must : 쿼리가 참인 도큐먼트 검색 must_not : 쿼리가 거짓인 도큐먼트 검색 should : 검색 결과 중 이 쿼리에 해당하는 도큐먼트들의 점수를 높임 filter : 쿼리가 참인 도큐먼트를 검색하지만 스코어를 계산하지 않음. must보다 검색속도가 빠르고 캐싱 가능 Bool Query 사용방법 GET /_search { "query": { "bool": { "must": [ { }..
검색 수많은 데이터에서 조건에 부합하는 데이터만 가져오는 행위 풀텍스트 쿼리 (Full Text Query) match_alll 별다른 조건없이 해당 인덱스의 모든 도큐먼트를 검색하는 쿼리. 검색 시 쿼리를 넣지 않으면 자동 match_all GET my_index/_search match 풀 텍스트 검색에 사용되는 가장 일반적인 쿼리 GET my_index/_search { "query": { "match": { "message": "dog" } } } 검색 결과의 default는 or 조건 GET my_index/_search { "query": { "match": { "message": "quick dog" } } } 이렇게 하면 quick or dog가 있는 모든 도큐먼트를 찾음. 검색 조건을 A..
ES의 단일 데이터는 document index는 document의 논리적인 집합. 도큐먼트 접근 http://://_doc/ 데이터 입력(PUT) PUT 이용 PUT my_index/_doc/1 { "name":"Jongmin Kim", "message":"안녕하세요 Elasticsearch" } 이미 있는 인덱스에 아래와 같은 데이터를 PUT명령으로 넣게 되면 이전 document는 사라지고 덮어씌워짐. PUT my_index/_doc/1 { "age:":40 } 데이터 보기 GET my_index/_doc/1 데이터 삭제 DELETE my_index/_doc/1 //인덱스에 해당하는 data만 삭제됨. DELETE my_indx //인덱스 통째로 삭제 수정(POST) post명령으로 처음 데이터를 ..