ABOUT ME

Developer를 위한 Reference 블로그 입니다.

Today
Yesterday
Total
  • Synonym Search
    BackEnd/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

    댓글

Designed by Tistory.