동의어 API 예제
원본 보기동의어 API 예제
이 페이지에서는 Synonyms API를 사용해 동의어 세트를 생성하거나 업데이트하는 실전 예제를 확인할 수 있습니다. 아래 예제는 새 동의어 세트를 만들고 규칙을 검증하는 방법을 보여주며, 동의어 세트가 업데이트될 때 분석기가 어떻게 자동으로 다시 로드되는지 설명합니다.
다음 예제는 my-synonyms-set이라는 새 동의어 세트를 생성합니다:
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"id": "test-1",
"synonyms": "hello, hi"
},
{
"synonyms": "bye, goodbye"
},
{
"id": "test-2",
"synonyms": "test => check"
}
]
}
포함된 동의어 규칙 중 하나라도 유효하지 않으면 API가 오류를 반환합니다.
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"synonyms": "hello => hi => howdy"
}
]
}
{
"error": {
"root_cause": [
{
"type": "action_request_validation_exception",
"reason": "Validation Failed: 1: More than one explicit mapping specified in the same synonyms rule: [hello => hi => howdy];",
"stack_trace": ...
}
],
"type": "action_request_validation_exception",
"reason": "Validation Failed: 1: More than one explicit mapping specified in the same synonyms rule: [hello => hi => howdy];",
"stack_trace": ...
},
"status": 400
}
기존 동의어 세트가 업데이트되면 해당 동의어 세트를 사용하는 search-analyzer가 모든 인덱스에서 자동으로 다시 로드됩니다. 이는 해당 동의어 세트를 사용하는 모든 인덱스에 대해 Reload search analyzers API를 호출하는 것과 같습니다.
예를 들어 동의어 세트를 사용하는 인덱스를 생성한 뒤 업데이트하면 다음과 같습니다:
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"id": "test-1",
"synonyms": "hello, hi"
}
]
}
PUT /test-index
{
"settings": {
"analysis": {
"filter": {
"synonyms_filter": {
"type": "synonym_graph",
"synonyms_set": "my-synonyms-set",
"updateable": true
}
},
"analyzer": {
"my_index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase"]
},
"my_search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "synonyms_filter"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_index_analyzer",
"search_analyzer": "my_search_analyzer"
}
}
}
}
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"id": "test-1",
"synonyms": "hello, hi, howdy"
}
]
}
다시 로드한 결과는 응답에 함께 포함됩니다:
{
"result": "updated",
"reload_analyzers_details": {
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"reload_details": [
{
"index": "test-index",
"reloaded_analyzers": [
"my_search_analyzer"
],
"reloaded_node_ids": [
"1wYFZzq8Sxeu_Jvt9mlbkg"
]
}
]
}
}