2012-03-15 4 views
1

나는 많은 고객이있는 데이터베이스를 가지고 있습니다. 시스템 사용자는 무엇보다도 고객의 계정을 이름으로 검색 할 수 있기를 원합니다.Sql Server 전체적으로 들리는 사람 이름

내가 수행 한 작업은 CustomerId 및 nvarchar (max) 필드 "CustomerFullText"가있는 CustomerFullText라는 새 테이블을 만드는 것입니다. "CustomerFullText"에서 저는 고객을 위해 가지고있는 모든 텍스트를 연결합니다. 이름, 성, 주소 등이 있으며 해당 필드에 전체 텍스트 색인이 있으므로 사용자가 단일 검색 상자에 입력하고 일치하는 결과를 얻을 수 있습니다.

많은 열에 저장된 데이터를 검색하는 것이 더 나은 결과를 얻은 것으로 밝혀졌습니다. 그 자체가 끔찍한 아이디어인지 여부에 관심이 있다고 생각합니다.

많은 사람들이 Katherine과 Catherine, Catharine과 같은 발음이지만 다른 이름을 사용합니다. 데이터베이스에 기록 된 사람은 Katherine이지만 Kate로 자신을 소개 한 사람입니다. 또한, 맥도날드 대 맥도날드, 리즈 대 엘리자베스 등등.

따라서 전체 텍스트를 작성하기 전에 원래 이름을 올바르게 저장하면서 일련의 대체 작업을 수행하고 있습니다. 그래서 전체 캐서린과 카테세린 등은 전체 텍스트 필드에서 "케이트"로 대체됩니다. 데이터베이스를 쿼리하기 전에 검색 매개 변수에서 동일한 변환을 수행하므로 "캐서린"을 검색 상자에 입력하면 캐서린과 캐서린이 일치하는 데이터베이스의 전체 텍스트 인덱스에 대해 실제로 "케이트"에 대한 쿼리가 실행됩니다 등등.

내 질문은 :이 기존 SQL Server 전체 텍스트 기능의 일부를 복제합니까? 나는 모양을 보았습니다. 그러나 이것은 사용자 정의 줄기 또는 단어 분리기 또는 그와 비슷한 것이라고 생각하지 않습니다.

답변

2

데이터를 음성 학적으로 정상화하려고 시도하는 대신 Double Metaphone 알고리즘을 사용합니다. 본질적으로 기본 SOUNDEX 아이디어를 훨씬 잘 구현합니다.

여기 구현 예제는 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=13574 이상이 위키피디아 링크에 나와 있습니다.

단어의 두 가지 정규화 된 코드 버전이 생성됩니다. 그런 다음 두 열을 추가로 유지하고 검색 텍스트와 비교하여 Double Metaphone으로 즉시 변환 할 수 있습니다.

+0

재미있어 보이지만 근본적으로 두 가지 질문이 있습니다 (미안합니다!). 하나는 "음성 학적으로 데이터를 정규화하기위한 최상의 알고리즘"입니다. 이중 메타 폰은 단순한 검색보다 대체로 더 나은 대답입니다. 두 번째는 "SQL Server 전체 텍스트 검색이 이러한 종류의 작업을 지원합니까, 아니면 직접 수행해야합니까?"라고 생각합니다. 더 걱정스러운 것 같습니다. –

+0

@BenCurthoys 아니요, 전체 텍스트 인덱싱은이 기능을 지원하지 않으므로 직접 롤백하거나 타사 솔루션을 사용해야합니다. – RedFilter

+0

SQL Server에는 기본 SOUNDEX 구현이 포함되어 있습니다. 첫 번째 단계로 시도해 볼 수 있습니다. http://msdn.microsoft.com/en-us/library/ms187384.aspx – lyrisey