나는 매우 기본적인 시나리오라고 생각하지만,이 글은 SQL Server 전체 텍스트 카탈로그 및 인덱스를 사용하여 쉽게 들릴 수 있다고 생각합니다.전체 텍스트 인덱스가 포함 된 ContainsTable 및 부울 논리가 포함 된 여러 열
이름과 성이 2 개 있습니다. 나는 누군가가 "John Smith"라는 사람과 에 일치하는 사람을 입력하면이 먼저 나오고 마지막 사람이 먼저 와야한다는 것과 같은 전문 검색을 지원하고자합니다.
여러 열에 인덱스를 쉽게 만들 수 있고 여러 열을 쉽게 검색 할 수 있지만 점수에는 여러 열이 반영되지 않습니다. CLAUSE_HERE 인 경우 그 문구 중 하나를 필드에 존재하지 않기 때문에
SELECT [Key], Rank
FROM CONTAINSTABLE([User], (FirstName,LastName), '<CLAUSE_HERE>')
- 는 "존 스미스는"나는 어떤 결과를 얻을 수 없습니다.
- "john OR smith"인 경우 두 필드 중 하나의 이름을 가진 모든 사용자가 도움이되지 않는 순서로 정렬됩니다.
- "john AND smith"인 경우 두 필드가 모두 포함되어 있지 않으므로 결과가 표시되지 않습니다.
유일한 해결책은 각 필드에 containstable
을 실행하는 쿼리를 생성하고 일부 수학을 수행하며 점수를 합산하는 것입니다. 그 주위에 더 쉬운 방법이 있습니까? 제 실제 쿼리에는 훨씬 많은 필드가 있습니다 - 이것은 단순화 된 예제입니다.
완전히 작동했습니다. 왜 전체 텍스트가 자동으로 이렇게하지 않습니까? 나는 여러 컬럼에 전체 텍스트를 적용하는 것이 out-of-the-box처럼 작동 할 것이라고 생각했다. 맞춰봐. –