BackEnd/Elasticsearch API
Synonym Search
hanseom
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
[참고자료]
반응형