Server/Elastic Search에 해당하는 글들 6 Articles matched 목록이 없습니다. [Elasticsearch] 여러 인덱스 조회 시 없는 인덱스 조회 해도 에러 결과가 아닌 정상 결과 받도록 처리하는 방법 (how to multi-search non exist index) 여러 인덱스를 한번에 조회해오는 쿼리 문법인 msearch를 사용하다가 하나의 쿼리에서 여러 인덱스 결과를 한번에 받아올 수 있는 방법이 있는지 찾아보았습니다. 방법은 아래와 같습니다. 원래 msearch 문법 {"index" : "인덱스이름1"} {"query" : "쿼리"} {"index" : "인덱스이름2"} {"query" : "쿼리"} 이런식으로 쿼리를 전송하게 되면 결과로 받아오는 구조가 다음과 같이 나옵니다. 마지막에 비어있는 한줄은 msearch의 문법입니다. { "took": 19, "responses": [ { 인덱스이름1의 결과 목록 }, { 인덱스이름2의 결과 목록 } ] } 인덱스를 여러개 지정 하는 문법 {"index" : "인덱스이름1,인덱스이름2"} {"query" : "쿼리.. [Elasticsearch] 어떻게 공백을 포함한 문자열을 통째로 검색어로 사용할 수 있을까? Elasticsearch는 검색엔진으로 데이터를 저장할 때 키워드 단위 즉, 쉽게 말해서 단어 단위로 쪼개어 저장을 하게 되는데요. 이 때문에 검색어도 마찬가지로 단어 단위로 탐색이 됩니다. 만약에 검색하고자 하는 검색어에 공백이 포함되어 있는 경우 Elasticsearch에서는 기본적으로 default_operator라는 것이 설정 되어 있어서 OR 조건으로 적용되요. 예를 들어서 다음 쿼리를 통해 조회하는 경우에요. { "query" : { "query_string" : { "field": "name", "query": "apple orange" } } } 이렇게 검색하는 경우 name이라는 필드 안에 apple 또는(OR) orange 라는 키워드(문자)가 들어가있으면 위의 쿼리 결과로 나와요. 하.. [Elasticsearch] 업데이트 시 해당 document 존재여부에 따라 update(script) or create Elasticsearch(이하 ES)는 보통 쌓인 데이터들을 ES구조로 컨버팅해서 대용량의 데이터를 인덱싱하여 빠르게 찾아볼 수 있도록 하는데 많이 사용되는데 이번 프로젝트 같은 경우에는 ES를 DB 처럼 사용해보았습니다. ES에 바로 데이터를 insert, update, delete를 하는 로직을 짜보았는데요, 그러다가 update 과정에서 벽에 부딪혔는데 해결 방법을 찾아서 정리해보려고 합니다. update를 하는데 처음에 로직을 기존 RDB처럼 해당 문서의 ID로 조회하여 문서의 존재 여부를 판단하고 없으면 insert(ES에서는 create문)를 존재하는 경우 update문을 날리도록 하였습니다. 그런데 서로 다른 여러 서버에서 쿼리문을 날리다보니 조회하는 시점에는 없던 문서였는데 다른 서버에서는.. [elasticsearch] ELK 스택 서버 구성 검색엔진이라는 말은 포털사이트를 이용해본적이 있는 사람이라면 한번쯤은 들어봤을 것입니다. 듣기만 들어봤지 정말 어떤 기능을 하는지는 잘 모를것이라 생각이 듭니다. 포털사이트의 구조를 간단하게 분석해보면 크롤링 + 검색엔진이라고 볼 수도 있을 것 같습니다. 크롤링이란 데이터를 수집하는것을 의미하고 검색엔진이라는 툴로 수집한 데이터를 색인하고 색인을 통해서 빠른 속도로 사용자가 검색한 것을 찾아주는 서비스라고 생각합니다. 그 중에서 오늘은 검색엔진 서버를 구축하는 것을 정리해보려고 합니다. 검색엔진도 종류가 있겠지만 그 중에 엘라스틱서치(Elasticsearch)를 정리해보려고 합니다. 서버생성 저는 NCloud라는 네이버 클라우드 서비스를 이용해서 구축해보았습니다. 포털사이트를 구축하는게 목적이 아닌 거대.. 엘라스틱서치(elastic search) query 검색 결과 구조 엘라스틱 서치의 검색 결과를 보면 JSON 구조로 여러 키와 값들이 나오는데 각각의 요소들이 도대체 어떤 의미를 지닌건지 구조를 정리해놓으려고 합니다. 검색결과 JSON { "took": 3, // 검색 수행 시간 (milliseconds) "timed_out": false, // 검색 쿼리 수행 중 timeout 발생 여부를 나타낸다. "_shards": { // 요청에 대한 검색 결과를 위해 참여한 샤드 "total": 2, "successful": 2, // 요청에 대한 성공 샤드 수 "failed": 0 // 요청에 대한 실패 샤드 수 }, "hits": { "total": 1, // 요청에 대한 결과 문서 수 (결과 전체 개수) "max_score": 1.0, // 검색 쿼리에 얼마만큼 부합되는.. [elastic search] 결과 내 검색 Elastic Search(엘라스틱서치)를 이번 프로젝트에서 처음으로 접해봤는데 그 속도가 어마어마하게 느껴졌습니다. 검색 기능을 RDB에서 구현을 하자니 속도가 너무 느리고 속도를 높이려고 인덱스를 걸자니 LIKE문을 양쪽에 '%'를 붙이니 인덱스도 안걸리고 .. 뭔가 제한적임을 느꼈습니다. 그러다가 해결방안으로 엘라스틱서치를 탑재한 서버를 따로 구성하고 그 서버에 접근해서 검색을 하도록 하자는 방안이었습니다. REST API처럼 검색 서버를 만드는 것이죠. 또한 페이지 내에서 결과 내 검색 기능이 필요 했는데 RDB에선 간단하게 구현이 가능했지만 낯선 Elastic Search 문법에서 조금 헤매었습니다. Elastic Search 결과 내 검색 "query": { "query_string": { ".. 1