ElasticSearch
-
[ElasticSearch] - 검색 품질 개선: HTML 태그 제거하는 방법ElasticSearch/문법 2025. 11. 27. 17:24
✅ 검색 시 필요없는 HTML 태그 제거하기많은 게시글 서비스는 굵게, 밑줄, 색상, 링크 등 다양한 스타일링을 위해 HTML 태그를 포함한 채로 데이터를 저장한다.그러나 이런 HTML 태그까지 검색 토큰으로 저장되면 검색 품질이 저하되고, 역인덱스 용량도 불필요하게 증가한다.이번 실습에서는 HTML 태그를 제거한 후 검색 가능하도록 만드는 방법을 다뤄보자.1. Custom Analyzer를 활용해 인덱스 생성하기 (HTML 제거 X 버전)우선 HTML 태그가 제거되지 않는 단순 Analyzer를 구성해보자.// 기존 인덱스 삭제DELETE /boards// 인덱스 생성 + 매핑 정의 + Custom Analyzer 적용PUT /boards{ "settings": { "analysis": { ..
-
[ElasticSearch] - Elasticsearch에서 대소문자 구분 없이 검색하는 방법 | lowercase필터ElasticSearch/문법 2025. 11. 27. 11:51
1. Custom Analyzer를 활용해 인덱스 생성하기Elasticsearch는 아무 설정 없이 인덱스를 생성하면 기본적으로 standard analyzer를 사용한다.이번 실습에서는 standard analyzer가 아닌, Analyzer를 직접 구성하는 Custom Analyzer를 적용해보자.아래는 lowercase 필터가 없는 Custom Analyzer 버전이다// 기존 인덱스 삭제DELETE /products// 인덱스 생성 + 매핑 정의 + Custom Analyzer 적용PUT /products{ "settings": { "analysis": { "analyzer": { "products_name_analyzer": { "char_filter..
-
[ElasticSearch] - Analyze API로 보는 standard analyzer의 토큰 분리 원리ElasticSearch/문법 2025. 11. 27. 11:19
문법 (Analyze API)// 방법 1 (standard analyzer 바로 사용)GET /_analyze{ "text": "_________", "analyzer": "standard"}// 방법 2 (standard analyzer 구성 요소를 직접 명시)GET /_analyze{ "text": "_________", "char_filter": [], "tokenizer": "standard", "filter": ["lowercase"]}두 방식은 완전히 동일하게 동작한다.단, 앞으로 실습에서는 각 요소(Char Filter / Tokenizer / Token Filter)의 영향을 개별적으로 확인하기 위해 방법 2를 자주 사용할 예정이다. 첫번째 방법에서 standard의 경우는 띄..
-
[ElasticSearch] - 애널라이저란?ElasticSearch 2025. 11. 20. 10:36
✅ 애널라이저(Analyzer)란?이전 글에서 Elasticsearch가 products 인덱스의 name 필드를 어떻게 잘게 나누어 **역인덱스(Inverted Index)**에 저장하는지 살펴봤다. 이때 문자열(text)을 토큰(token)으로 변환하는 핵심 장치가 바로 **애널라이저(Analyzer)**다.예를 들어 아래와 같은 문서가 있다고 하자.POST /products/_create/1{ "name": "Samsung Galaxy S25 Ultra 512GB"}POST /products/_create/2{ "name": "Samsung Z Flip 7 256GB"}POST /products/_create/3{ "name": "Samsung Galaxy Tab A9 WiFi 64GB"} ..
-
[ElasticSearch] - Elasticsearch 역인덱스(Inverted Index)와 검색 동작파헤치기ElasticSearch 2025. 11. 14. 11:44
Elasticsearch 역인덱스(Inverted Index)와 검색 동작파헤치기Elasticsearch에서 text 필드는 단어를 쪼개서 저장하고, 순서와 관계없이 검색이 가능합니다.왜 이런 일이 가능한지, 그리고 검색 결과가 어떤 기준으로 정렬되는지 실습과 함께 정리해보겠습니다.1. 인덱스 생성PUT /products 2. 매핑 정의아래처럼 name 필드를 text 타입으로 지정합니다.PUT /products/_mappings{ "properties":{ "name":{ "type" : "text" } }}POST /products/_doc{ "name":"Samsung 갤럭시 울트라 S20 64G"}GET /products/_search매핑 정의 후 도큐먼트를 삽입 후 조회..
-
[ElasticSearch] 인덱스 생성, 매핑, 기본 CRUDElasticSearch 2025. 11. 4. 14:47
1) 인덱스 생성 / 조회 / 삭제1-1) 인덱스 생성Dev ToolsPUT /members 1-2) 인덱스 존재 확인GET /members 1-3) 없는 인덱스 조회 시 응답 확인GET /nope_index 1-4) 인덱스 삭제DELETE /members2) 매핑(mapping) 정의/확인인덱스를 만들고 필드 타입을 명확히 지정하면 분석/검색/집계에서 예측 가능한 동작을 얻을 수 있어요. mappings와 properties의 경우 아래와 같이 규칙을 가진다. { "mappings": { "properties": { "필드명": { "type": "데이터타입", "옵션들": "..." } } }} 2-1) 인덱스 생성 + 매핑 지정(권장)PUT /members{ "mapping..
-
오류 - Could not find com.mysql:mysql-connector-j:8.0.26.ElasticSearch/오류 2025. 3. 16. 14:03
Could not find com.mysql:mysql-connector-j:8.0.26. 이 오류는 com.mysql:mysql-connector-j:8.0.26를 찾을 수 없다는 문제입니다. runtimeOnly 'com.mysql:mysql-connector-j:8.0.26'Build.gradle에는 이렇게 선언되어있는 상태입니다. 1. 본인의 컴퓨터에 설치된 mysql버전을 확인해보도록 하자.select version();해당 명령어를 통해 version확인 2. 본인의 컴퓨터에 설치된 mysql버전과 일치하도록 gralde파일을 수정한다.
-
ServletException: not delete 오류ElasticSearch/오류 2025. 1. 27. 21:26
삭제 성공1월 27, 2025 9:22:07 오후 org.apache.catalina.core.StandardWrapperValve invokeSEVERE: 경로 [/MVC02]의 컨텍스트 내의 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [javax.servlet.ServletException: not delete]을(를) 발생시켰습니다.javax.servlet.ServletException: not delete at org.apache.jsp.member.memberDelete_jsp._jspService(memberDelete_jsp.java:130) at org.apache.jasper.runtime.HttpJspBase.s..