질문에 답변 드리자면: 네, 우리 포럼에서는 search_ignore_accents 설정이 활성화되어 있습니다.
불행히도 이 설정으로 인해 우리가 겪고 있는 문제가 해결되지 않습니다. 검색 결과가 철학적으로 동일한 아랍어와 페르시아어 문자를 여전히 매칭하지 못하므로, 해당 설정에도 불구하고 문제가 지속되고 있습니다.
아랍어와 페르시아어 사이트의 검색 경험을 크게 향상시킬 수 있으므로 이 요청은 합리적이라고 생각합니다. 이 기능을 구현하는 PR을 검토하는 것을 환영하며, 따라서 해당 이슈에 pr-welcome 라벨을 붙이겠습니다.
이 기능을 개발하기로 결정한 분들을 위해: 모든 정규화 로직은 사이트 설정 뒤에 배치되어야 하며, 아랍어와 페르시아어 사이트에서는 기본적으로 이 설정이 활성화되고(site_settings.yml의 locale_default 참조) 다른 모든 로케일에서는 기본적으로 비활성화되어야 합니다. 코어에는 이미 발음 기호가 있는 문자를 위한 유사한 정규화 로직이 있으므로(참조: lib/search.rb), 이 기능을 구현할 때 유용한 참고 자료가 될 것입니다.
저는 기술 전문가가 아니지만, 페르시아어-아랍어 이중 언어 Discourse 포럼에서 검색 쿼리가 누락되지 않도록 이 문제를 조사해 왔습니다. Discourse는 PostgreSQL을 사용하므로 정규화(normalization)가 필수적입니다. 사용자가 페르시아 문자로 검색을 시도할 수 있지만, 동일한 단어는 아랍 문자로 저장되어 있거나 그 반대일 수 있기 때문입니다. 적절한 정규화 없이는 검색이 실패하게 됩니다.
제가 배운 바에 따르면, Unicode NFKC 정규화를 사용하는 것은 좋은 출발점입니다. 이는 리가처(ligatures), 표시 형식(presentation forms), 아랍어/페르시아어 숫자 등 많은 호환성 사례를 처리합니다.
그러나 페르시아어와 아랍어 텍스트의 경우, NFKC만으로는 충분하지 않습니다. 이는 시각적 및 의미적으로 동등하지만 바이너리 수준에서 차이가 나는 몇 가지 중요한 문자 변형을 정규화하지 못합니다.
아래에서는 제 연구와 탐구를 통해 도출한 절차와 통찰력을 개요로 제시합니다.
전체 설계 전략
리가처, 표시 형식, 숫자 통합을 처리하기 위해 먼저 Unicode NFKC 정규화를 적용합니다.
정의된 순서로 사용자 지정 문자 매핑을 적용합니다(예: 아랍어 Ya보다 먼저 Hamza 변형을 정규화).
저장용과 검색용 정규화 정책을 분리합니다:
정준 저장에는 보수적(Conservative) 프로필을 사용합니다(ZWNJ 보존, 의미 이동 방지).
검색에는 관용적(Permissive) 프로필을 사용합니다(ZWNJ 무시, Hamza 변형 통합, 숫자 정규화).
모든 매핑은 데이터베이스의 중앙 집중식 매핑 테이블 또는 애플리케이션의 Ruby 해시를 통해 설정 가능해야 합니다.