동의어 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"
        ]
      }
    ]
  }
}