-
Synonym SearchBackEnd/Elasticsearch API 2025. 4. 3. 04:00반응형
검색 시 유사어를 활용하여 검색 결과의 범위를 확장하고 검색 경험을 향상시키는 기능입니다. 예를 들어, 사용자가 "laptop"을 검색하면 "notebook"이 포함된 문서도 찾을 수 있게 해주는 기능입니다.
동의어 구현 방법
1. Synonyms API 사용 (Elasticsearch 8.13+)
REST API를 통해 동의어 세트를 관리할 수 있습니다.
PUT /_synonyms/my_synonyms { "synonyms_set": [ { "id": "tech-terms", "synonyms": ["laptop, notebook, portable computer"] } ] }
그리고 분석기 설정에서 이를 참조합니다.
"filter": { "my_synonym_filter": { "type": "synonym", "synonyms_set": "my_synonyms" } }
2. Synonyms File 사용
- 동의어 파일을 생성합니다.
laptop, notebook, portable computer tv, television smartphone, mobile phone, cell phone
- 해당 파일을 모든 Elasticsearch 노드의 config 디렉토리에 저장합니다.
- 인덱스 설정에서 해당 파일을 참조합니다.
"filter": { "my_synonym_filter": { "type": "synonym", "synonyms_path": "synonyms.txt" } }
동의어 적용 시점
인덱스 시점 적용
PUT /my_index { "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "synonyms_path": "synonyms.txt" } }, "analyzer": { "my_synonym_analyzer": { "tokenizer": "standard", "filter": ["lowercase", "my_synonym_filter"] } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "my_synonym_analyzer" } } } }
- 검색 시 성능이 더 좋으나, 동의어 규칙 변경 시 재인덱싱이 필요합니다.
검색 시점 적용
PUT /my_index { "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "synonyms_path": "synonyms.txt", "updateable": true } }, "analyzer": { "my_synonym_analyzer": { "tokenizer": "standard", "filter": ["lowercase", "my_synonym_filter"] } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "standard", "search_analyzer": "my_synonym_analyzer" } } } }
- 동의어 규칙 변경 시 재인덱싱이 필요하지 않으나, 검색 시 약간의 성능 저하가 있을 수 있습니다.
동적 업데이트
동의어 파일을 업데이트한 후에는 다음 API를 호출하여 검색 분석기를 리로드할 수 있습니다. 이를 통해 인덱스를 닫거나 재인덱싱하지 않고도 동의어를 동적으로 업데이트할 수 있습니다.
POST /my_index/_reload_search_analyzers
[참고자료]
반응형'BackEnd > Elasticsearch API' 카테고리의 다른 글
Fuzzy Match Query (0) 2025.04.01 Proximity Search (0) 2025.03.31 Aggregation (0) 2025.03.30 Join Query (0) 2025.03.29 Nested Query (0) 2025.03.23