GOAL : 가능한 경우 서로 다른 검색 열 값과 순서를 가진 결과를 반환하려면 RANK
을 입력하십시오.FREETEXTABLE을 사용하여 여러 열을 검색 할 때
규칙 :
- 어떤 열이
- 결과 전달
null
하지 않는는 해당 열에 모든 검색 문자열을 포함 해야합니다, 검색 할 수 있도록 허용 - 모든 검색 IF 문자열이
null
이면 빈 결과가 반환됩니다.
현재 저장 프로 시저 :
내가 위에서 언급 한 규칙을 준수하기 위해 많은 연구 후에이 가지고 올 수 있었다.
ALTER PROCEDURE [Application].[usp_Institution_Search]
@RowCount INT = 100,
@Name NVARCHAR(255),
@City NVARCHAR(255),
@Country NVARCHAR(255)
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@Name, '') = '' SET @Name = '""'
IF ISNULL(@City, '') = '' SET @City = '""'
IF ISNULL(@Country, '') = '' SET @Country = '""'
SELECT TOP (@RowCount)
[i].*
FROM
[dbo].[Institutions] [i]
WHERE
((NULLIF(@Name, '""') IS NULL OR FREETEXT([i].[InstitutionName], @Name))
AND (NULLIF(@City, '""') IS NULL OR FREETEXT([i].[City], @City))
AND (NULLIF(@Country, '""') IS NULL OR FREETEXT([i].[Country], @Country))
AND
(
NULLIF(@Name, '""') IS NOT NULL
OR NULLIF(@City, '""') IS NOT NULL
OR NULLIF(@Country, '""') IS NOT NULL)
)
END
문제 : 나는 InstitutionName
으로 결과를 정렬하려고했지만 나는 대신 RANK
사용에 대한 생각했다. 더 많은 연구를 한 후 FREETEXTTABLE
을 사용하는 것이 가장 좋음을 발견했습니다. 이 시점에서 대부분의 결과가 항상 여러 열에 대해 하나의 문자열을 검색하는 것에 대해 이야기하면서 상황에 가장 잘 대처하는 방법을 잘 모르겠습니다.
나는 이것이 어떻게 작동하는지 완전히 확신하지는 않지만, 가장 높은 조합을 모든 열의 검색에서 합치는 것으로 가정합니다. RANK
.
가능하다면 몇 가지 예를 보여주세요.