엘라스틱서치 설치 및 기본내용
- 코딩 / ElasticSearch
- 2025. 3. 26.
- 1. 엘라스틱서치 다운로드 (필자는 8.17.4 설치)
- 2. 엘라스틱서치 설정
- 3. 엘라스틱서치 실행
- 4. 설치 테스트
- 5. Elasticsearch 테스트 인덱스 만들기
- 6. 상품 1개 색인 테스트 (엘라스틱서치에 데이터 넣기)
- 7. 기존 데이터 삭제하는 방법
- * nori 설치
- Elasticsearch vs SQL 쿼리 비교
1. 엘라스틱서치 다운로드 (필자는 8.17.4 설치)
- 키바나도 동일한 버전으로 설치를 해야하나 필자는 키바나를 사용하지 않을 예정이라 설치X
Download Elasticsearch
Download Elasticsearch or the complete Elastic Stack (formerly ELK stack) for free and start searching and analyzing in minutes with Elastic....
www.elastic.co
2. 엘라스틱서치 설정
# C:\elasticsearch\elasticsearch-8.17.4\config\elasticsearch.yml
cluster.name: my-es-cluster
node.name: node-1
path.data: C:/elasticsearch/data
path.logs: C:/elasticsearch/logs
network.host: 127.0.0.1
http.port: 9200
# 인증 끄기 (테스트용)
xpack.security.enabled: false
1) JVM Heap 설정
(예: C:\elasticsearch\elasticsearch-8.17.4\config\jvm.options)
# 기존 (자동 감지)
# -Xms...
# -Xmx...
# 아래처럼 고정값으로 수정 (예: 8GB 사용)
-Xms8g
-Xmx8g
Elasticsearch는 Java 기반이라 실행 시 JVM Heap을 사용하는데,
기본 설정으로는 머신의 RAM 절반까지 자동 할당한다.
→ 그래서 32GB RAM이 있다면 → 16GB heap
→ 그 외에 Lucene, OS 캐시, 기타 native memory 때문에 실제 사용량이 32GB 이상으로 튀는 현상 발생 가능
3. 엘라스틱서치 실행
# PowerShell 또는 cmd에서
cd C:\elasticsearch\elasticsearch-8.x\bin
elasticsearch.bat
4. 설치 테스트
http://localhost:9200
{
"name" : "node-1",
"cluster_name" : "my-es-cluster",
"cluster_uuid" : "...",
"version" : {
"number" : "8.x.x",
...
}
}
5. Elasticsearch 테스트 인덱스 만들기
from elasticsearch import Elasticsearch
es = Elasticsearch("http://localhost:9200")
index_name = "products"
# 한글 형태소 분석기 nori 사용
index_body = {
"settings": {
"analysis": {
"analyzer": {
"korean_analyzer": {
"type": "custom",
"tokenizer": "nori_tokenizer",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"keyword": {"type": "text", "analyzer": "korean_analyzer"},
"product_name": {"type": "text", "analyzer": "korean_analyzer"},
"normal_price": {"type": "integer"},
"discount_price": {"type": "integer"},
"shop_name": {"type": "keyword"},
"img_url": {"type": "keyword"},
"product_url": {"type": "keyword"},
"expire_date": {"type": "date"}
}
}
}
# 기존 인덱스 삭제 후 생성
if es.indices.exists(index=index_name):
es.indices.delete(index=index_name)
es.indices.create(index=index_name, body=index_body)
print("✅ 'products' 인덱스 생성 완료")
6. 상품 1개 색인 테스트 (엘라스틱서치에 데이터 넣기)
import datetime
doc = {
"keyword": "나이키",
"product_name": "나이키 에어맥스 270 블랙",
"normal_price": 129000,
"discount_price": 99000,
"shop_name": "쇼핑몰1",
"img_url": "https://example.com/img1.jpg",
"product_url": "https://example.com/item1",
"expire_date": datetime.datetime(2025, 4, 30)
}
res = es.index(index="products", document=doc)
print("📦 색인 결과:", res['result'])
7. 기존 데이터 삭제하는 방법
1. 전체삭제 (인덱스 전체 삭제)
es.indices.delete(index="products")
2. 조건 삭제 (예: 만료일 지난 상품)
query = {
"query": {
"range": {
"expire_date": {
"lt": "now"
}
}
}
}
es.delete_by_query(index="products", body=query)
* nori 설치
cd C:\elasticsearch\elasticsearch-8.17.3\bin
elasticsearch-plugin install analysis-nori
- 엘라스틱서치 재실행
Elasticsearch vs SQL 쿼리 비교
"query": "나이키" | WHERE 조건값 | 찾고자 하는 키워드 or 조건 |
"fields": ["title", "description", "keywords"] | WHERE title LIKE '%나이키%' OR description LIKE ... | 어떤 컬럼을 검색할지 지정 |
"multi_match" | OR 조건 다중 칼럼 검색 | 여러 필드에서 같은 키워드로 검색 |
"match" | WHERE title LIKE '%나이키%' | 단일 필드 검색 |
"fuzziness" | LIKE나 유사도 검색 | 오타나 유사 단어도 매칭 |
"size": 10 | LIMIT 10 | 결과 개수 제한 |
"from": 0 | OFFSET 0 | 페이지네이션 시작 위치 |
예시)
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "나이키",
"fields": ["title", "description", "keywords"],
"fuzziness": "AUTO"
}
},
{
"range": {
"created_at": {
"gte": "now-1d/d"
}
}
}
]
}
}
}
SELECT *
FROM products
WHERE (title LIKE '%나이키%'
OR description LIKE '%나이키%'
OR keywords LIKE '%나이키%')
AND created_at >= 오늘 자정 기준 하루 전
LIMIT 10 OFFSET 0;
'코딩 > ElasticSearch' 카테고리의 다른 글
엘라스틱서치 이해하기 (1) | 2025.03.26 |
---|---|
SpringBoot + ElasticSearch 연동 및 간단 API 호출해보기 (0) | 2022.11.02 |
엘라스틱서치 매핑 (0) | 2022.11.02 |
엘라스틱서치 검색 방법 (URI, Request Body) (0) | 2022.05.14 |
[Elasticsearch]엘라스틱서치의 기본개념 및 장점/단점 (0) | 2022.05.14 |