개요
최근 Azure의 AI Search 서비스를 다루게 되었는데, 동의어 처리에 대한 요구사항이 존재한다. 관련해서 AI Search의 동의어 처리를 제공하는 Synonym map에 대해 알아보자.
Synonym map
Synonym map은 여러 인덱스가 공유할 수 있는 최상위 리소스이며, 문자열 필드에 적용된다. 검색 서비스에 동등한 용어를 연관시켜 쿼리 범위를 확장할 수 있기 때문에 기술 전문 용어, 속어 등이 포함되는 경우 활용할 수 있다.
규칙
Apache Solr이라는 오픈소스 사양을 따르며 solr은 동등성, 그리고 명시적 매핑이라는 두 가지 종류의 규칙을 지원한다.
각 규칙은 Synonym map 당 5,000개(무료 서비스 기준) 또는 20,000개의 규칙을 정의할 수 있고, 각 규칙은 최대 20개의 항목을 가질 수 있다. 각 규칙은 개행 문자로 구분한다.
동등성
용어가 쿼리 내에서 대체될 수 있는 동일한 항목임을 나타내며, 용어에 대한 규칙은 규칙 내에서 쉼표롤 구분된다.
아래 예시에서 USA에 대한 쿼리는 USA OR United States OR United States of America로 확장된다.
"
USA, United States, United States of America\n
dog, puppy, canine\n
coffee, latte, cup of joe, java\n
"
명시적 매핑
명시적 매핑은 규칙 내에서 화살표(=>)로 표기하며, 어떤 용어에 대한 검색이 쿼리 타임에 다른 용어로 대체됨을 나타낸다. 화살표 왼쪽에 있는 용어가 화살표 오른쪽에 있는 용어로 대체된다는 의미이다.
아래 예시에선 Washington, Wash. WA에 대한 검색이 WA에 대한 검색으로 다시 작성되고, 쿼리 엔진은 WA라는 용어에 대한 항목만 찾는다.
"
Washington, Wash., WA => WA\n
California, Calif., CA => CA\n
"
이 외에는 예약 문자, 특수 문자(+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ / ')에 대한 이스케이프 처리가 있는데, 다른 언어와 동일하게 역슬래시(\)를 사용하여 처리한다.
Synonym map 관리
Synonym map은 인덱싱, 쿼리에 영향을 주지 않고 편집이 가능하다. 하지만 필드에 할당되어 있는 Synonym map을 삭제하는 경우에는 해당 필드를 포함하는 모든 쿼리가 404 Not Found 오류와 함께 실패한다.
참고로 Synonym map을 필드에 할당할 때에는 필드가 Edm.String 또는 Collection(Edm.String) 형식이어야 하고, searchable 속성이 true여야 하며, index 생성 또는 갱신 API를 사용해야 한다.
참고 문서
https://learn.microsoft.com/en-us/azure/search/search-synonyms?tabs=rest%2Crest-assign