SQL Server 전체 텍스트 검색에서 CONTAINSTABLE 및 NOT 키워드를 사용하고 단일 열에 제외 할 값이 포함 된 행을 제외 할 수 있습니까?전체 텍스트 검색 및 여러 열과 함께 NOT 키워드 사용
예를 들어, (이 문제를 설명하기 위해 간략화) 다음 인덱싱 된 뷰를 보자
ItemId INT
FirstName VARCHAR(200)
MiddleName VARCHAR(200)
LastName VARCHAR(200)
Address VARCHAR(1000)
ChildrenNames TEXT
SearchData TEXT
SearchData 다른 텍스트/VARCHAR 필드에서 발생하는 연결 필드이다.
이보기는 FIRSTNAME 포함 된 행을 찾으려면 다음 쿼리를 사용하여 검색 할 수 있지만 LASTNAME는: 그것은 바와 같이
SELECT *
FROM [v_MyView] V
LEFT OUTER JOIN CONTAINSTABLE
(
[v_MyView],
(
[FirstName],
[MiddleName],
[LastName],
[Address],
[ChildrenName],
[SearchData]
), '"name" AND NOT "lastname"') FTS ON [FTS].[Key] = [V].[ItemId]
WHERE (ISNULL(RANK,0) > 0)
이 쿼리는 올바른 결과를 반환하지 않는 것 검색 대상 필드 중 ALL이 기준을 충족하는 경우 행만 제외하고 반면에 기준을 충족하는 행은 ANY 행을 제외해야합니다.
즉. 이름 AND 임의 (단일) 열에 LASTNAME 포함 된 행이 아니라 이름 될 예정 모든 열의 LASTNAME를 (포함 행만보다 결과 집합에서 제외되어야 있을 것 같지 않게).
사용할 수있는 유일한 옵션은 사용자 쿼리에 exclude 값 (예 : name -lastname)이 포함되어 있는지 확인하는 것입니다. 그렇다면 'SearchData'열만 검색하면 쿼리가 연결된 열이므로 검색을 제한하십시오. 모든 데이터가 포함됩니다. 그러나 이는 관련성 순위에 영향을 미치며 좋은 해결책으로 보이지 않습니다.