라벨이 ElasticSearch인 게시물 표시

[ElasticSearch 정리하기] Full Text Search 종류

출처: https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-queries.html 출처: https://stackoverflow.com/questions/26001002/elasticsearch-difference-between-term-match-phrase-and-query-string 1. term 하나의 term을 찾는다. 이 term은 analyze 되지 않는다. 따라서 대소문자, 복수형 등이 다 구분된다 { "user":"Bennett" } { "query": { "term" : { "user" : "bennett" } } } //아무것도 리턴되지 않는다. (대소문자 구분) 2. match 가장 기본적인 search로 text, number, date, boolean을 사용할 수 있다. text는 검색하기전 analyze된다. fuzzy matching을 지원한다(정확하게 일치하지않더라도 연관성이 있다고 판단하면 리턴). GET /_search { "query": { "match" : { "message" : { "query" : "this is a test" } } } } 3. query_string 입력값을 analyze한다. 사용자가 명시적으로 ""로 둘러싸지않는이상 순서는 상관이 없다. { "foo":"I just said hello world" } { "foo":"Hello world" } { "foo...

[ELASTICSEARCH 공부하기] MAPPING

ElasticSearch를 도입하기전, ElasticSearch에대해 공부하기 위해 레퍼런스를 읽으면서 번역&정리한 글입니다. 문서 전체를 번역한 것이 아니라 개인적으로 정리가 필요하다 싶은 내용만 정리하였습니다. 본문:  ElasticSearch 공식레퍼런스 Mapping은 document와 document의 field가 어떻게 저장되고 인덱싱되는지를 정하는 것이다. Field Datatypes: - Simple types like text, keyword, date, long, double, boolean, ip - JSON형식을 띄는 object, nested - 특수한 경우에 사용되는 geo_point, geo_shape, completion 잘모르는 타입들 정리: Keyword datatype: - 주로 이메일주소, 우편번호 등 형식을 갖춘 데이터들을 저장하기 위해 사용된다. - 주로 필터링, 정렬, 종합을 위해 사용된다. - 정확한 값으로면 검색이 가능하다 Text datatype: - text로 지정된 field는 anlayzer를 통해 변환된다.(한글은 anlayzer-nori 플러그인을 별도로 깔아야됨) - 변환된 후에는 ES가 하나의 단어를 전체 내용중에서 찾을 수 있게 해준다. Nested datatype: - nested타입은 object타입의 특수한 형태로써 쉽게 말하자면 object의 list라고 생각하면된다. - 그리고 ES는 inner object라는 형식을 지원하지 않기때문에 이 list를 flatten하여 처리한다. PUT my_index/_doc/1 { "group" : "fans", "user" : [ { "first" : "John", "last" : "Smith" },...

[ElasticSearch 공부하기] Mapping Types

ElasticSearch를 도입하기전, ElasticSearch에대해 공부하기 위해 레퍼런스를 읽으면서 번역&정리한 글입니다. 문서 전체를 번역한 것이 아니라 개인적으로 정리가 필요하다 싶은 내용만 정리하였습니다. 본문:  ElasticSearch 공식레퍼런스 PUT /...customer/_doc/1 { "name": "John Doe", "characteristics": "he is tall, fat and wearing blue jacket" } 위의 예시에서 PUT /<index>/<mapping type>/<id> 순이다. 그래서 실제로 쿼리를 보내보면: { "_index" : "...customer", "_type" : "_doc", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }  이렇게 _type에 _doc이 뜨는 것을 볼 수 있다. mapping type이 7.x버전부터는 없어졌다고 하는데 무엇인지 알아둘겸 읽어보았다. ---여기서부터 원문--- 처음 ElasticSeach(이하 ES)가 출시했을때부터, 각각의 document는 하나의 index와 하나의 mapping type으로 저장되었다. Mapping Type은 document의 타입을...

[ElasticSearch 공부하기] Scalability and resilience: clusters, nodes, and shards

ElasticSearch를 도입하기전, ElasticSearch에대해 공부하기 위해 레퍼런스를 읽으면서 번역&정리한 글입니다. 문서 전체를 번역한 것이 아니라 개인적으로 정리가 필요하다 싶은 내용만 정리하였습니다. 본문:  ElasticSearch 공식레퍼런스 ElasticSearch(이하 ES)는 항상 접근 가능하고 필요에 따라 확장이 가능하도록 설계되었다. 서버(node)를 클러스터에 추가하기만 하면 ES가 자동으로 데이터와 쿼리 로드를 사용가능한 노드들로 분산하여 준다. Shard는 Primary와 Replica 두가지 종류가 있다. Index에 포함된 각각의 document는 1개의 primary shard에 포함된다. replica shard는 primary shard의 복제이다. Replica는 하드웨어 문제에 대응할 수 있도록 해주고 searching이나 document를 불러오는 작업을 처리하는 capacity를 늘려준다.

[ElasticSearch 공부하기] Information out: search and analyze

ElasticSearch를 도입하기전, ElasticSearch에대해 공부하기 위해 레퍼런스를 읽으면서 번역&정리한 글입니다. 문서 전체를 번역한 것이 아니라 개인적으로 정리가 필요하다 싶은 내용만 정리하였습니다. 본문:  ElasticSearch 공식레퍼런스 ElasticSearch(이하 ES)는 클러스터 매니징, 인덱싱, 데이터 검색을 위한 사용이 간단한 REST API를 제공한다. 그리고 테스트 목적으로 Command Line이나 Kibana의 개발자 콘솔에서 직접 request를 보낼 수도 있다. ES의 REST API는 구조화된 쿼리, 텍스트 쿼리, 두개가 혼합된 쿼리를 지원한다. 만약 gender와 age field를 employee index에서 검색하고 hire_date에 따라 정렬한다면 Full-text 쿼리는 query string과 매치되는 모든 document를 찾고, 연관도에 따라 정렬한다.

[ElasticSearch 공부하기] Data in: documents and indices

ElasticSearch를 도입하기전, ElasticSearch에대해 공부하기 위해 레퍼런스를 읽으면서 번역&정리한 글입니다. 문서 전체를 번역한 것이 아니라 개인적으로 정리가 필요하다 싶은 내용만 정리하였습니다. 본문:  ElasticSearch 공식레퍼런스 ElasticSearch (이하 ES)는 데이터를 분산 저장한다. 그리고 테이블에 행과 열의 방식으로 데이터를 저장하는 것이 아니라 JSON으로 직렬화하여 저장한다. 만약 클러스터가 여러개의 ES 노드로 구성되어 있다면 저장된 document들은 클러스터에 분산 저장되어 어떤 노드에서든 접근이 가능하다. Document가 저장되면 index가 되어 1초안에 거의 실시간으로 검색이 가능하다. ES는 Inverted Index라는 자료구조를 사용하여 매우 빠른 Full-Text-Search(이하 FTS)가 가능하다. Inverted Index는 document안에 존재하는 모든 유니크한 단어들을 정리하여 그 단어가 포함된  document들을 찾아낸다. Index 는 최적화된 document들의 모음이라고 할수있다. 그리고 각각의  document 들은 key-value로 구성된 데이터들을 저장하는  field 들로 구성된다. ES는 기본적으로 모든 field들을 인덱싱(앞의 index와는 조금 다름)하며 각각의 인덱싱된 field들은 최적화된 자료구조를 가지고 있다. 텍스트로 구성될 field들은 inverted indices 자료구조로 저장되고, 숫자와 위치정보 field들은 BKD 트리 구조로 저장된다. 이렇게 각각의 필드에 맞춤 자료구조를 사용하는 것이 ES가 매우 빠른 이유이다. 가끔은 하나의 field를 여러가지 방법으로 인덱싱하는 것이 유용할때가 있다. 예를 들면 문자열 field를 Full-Text-Search를 위하여 text field로 인덱싱하고, 데이터 정렬과 수집을 위해서 keyword field로도 인덱싱...