NEAR를 사용하여 다른 단어에 가까운 단어 검색
CONTAINS 조건자 또는 CONTAINSTABLE 함수에서 NEAR(근접 단어)를 사용하여 서로 가까운 단어 또는 구를 검색할 수 있습니다. 첫 번째 및 마지막 검색어를 구분하는 비 검색어의 최대 개수를 지정할 수도 있습니다. 또한 어떤 순서로든 단어나 구를 검색하거나 지정한 순서대로 단어와 구를 검색할 수 있습니다. SQL Server 2014는 현재 사용되지 않는 이전의 일반 근접 용어와 SQL Server 2012의 새로운 사용자 지정 근접 용어를 모두 지원합니다.
사용자 지정 근접 용어
사용자 지정 근접 용어에는 다음과 같은 새로운 기능이 도입되었습니다.
일치 항목을 구성하기 위해 첫 번째 검색어와 마지막 검색어를 구분하는 최대 검색 용어 수 또는 최대 거리를 지정할 수 있습니다.
최대 단어 수를 지정하는 경우 일치 항목이 지정된 순서로 검색 단어를 포함하도록 지정할 수도 있습니다.
일치 항목으로 간주되기 위해 텍스트 문자열이 다음을 수행해야 합니다.
지정된 검색어 중 하나로 시작하고 지정된 다른 검색어 중 하나로 끝납니다.
지정된 검색 단어를 모두 포함합니다.
첫 번째 검색어와 마지막 검색 단어 사이에 발생하는 중지 단어를 포함한 비 검색 용어의 수는 지정된 경우 최대 거리보다 작거나 같아야 합니다.
기본 구문은 다음과 같습니다.
NEAR(
{
search_term [ ,...n ]
|
(search_term [ ,...n ] ) [, <maximum_distance> [, <match_order> ] ]
}
)
참고 항목
custom_proximity_term> 구문에 <대한 자세한 내용은 CONTAINS(Transact-SQL)를 참조하세요.
예를 들어, 다음과 같이 'John'을 'Smith'의 두 용어 내에서 검색할 수 있습니다.
CONTAINS(column_name, 'NEAR((John, Smith), 2)')
일치하는 문자열의 몇 가지 예로는 "John Jacob Smith
" 및 "Smith, John
"가 있습니다. 문자열 "John Jones knows Fred Smith
"은 세 개의 비 검색어를 포함하므로 일치하지 않습니다.
특정 순서로 용어를 찾으려면, 예시 근접 용어를 "NEAR((John, Smith),2, TRUE).
"로 변경하십시오. 그러면 "John
"는 "Smith
"의 두 용어 이내에 있지만, "John
"가 "Smith
"를 앞설 때만 검색됩니다. 영어와 같이 왼쪽에서 오른쪽으로 읽는 언어에서 일치하는 문자열의 예는 "John Jacob Smith
"입니다.
아랍어나 히브리어와 같이 오른쪽에서 왼쪽으로 읽는 언어에서는 전체 텍스트 엔진이 지정된 단어를 반대 방향으로 적용합니다. 또한 SQL Server Management Studio의 개체 탐색기는 오른쪽에서 왼쪽으로 읽는 언어로 지정된 단어의 표시 순서를 자동으로 전환합니다.
참고 항목
자세한 내용은 이 항목의 뒷부분에 있는 "근접 검색에 대한 추가 고려 사항"을 참조하세요.
최대 거리를 측정하는 방법
10 또는 25와 같은 특정 최대 거리는 지정된 문자열의 첫 번째 검색어와 마지막 검색 단어 사이에 발생할 수 있는 중지 단어를 포함하여 검색되지 않는 용어 수를 결정합니다. 예를 들어 NEAR((dogs, cats, "hunting mice"), 3)
는 검색되지 않는 용어의 총 수가 3개("enjoy
", "but
" 및 "avoid
")인 다음 행을 반환합니다.
" "Cats
enjoy
hunting mice``, but avoid
dogs``.
동일한 근접 용어는 최대 거리가 4개의 비검색어("enjoy
", "but
", "usually
", 및"avoid
")로 인해 초과되므로 다음 행을 반환하지 않습니다.
" "Cats
enjoy
hunting mice``, but usually avoid
dogs``.
사용자 지정 근접 용어와 다른 용어 결합
사용자 지정 근접 단어를 일부 다른 단어와 결합할 수 있습니다. AND(&), OR(|) 또는 AND NOT(&!)을 사용하여 사용자 지정 근접 용어를 다른 사용자 지정 근접 용어, 간단한 용어 또는 접두사 용어와 결합할 수 있습니다. 예시:
CONTAINS('NEAR((term1,term2),5) AND term3')
CONTAINS('NEAR((term1,term2),5) OR term3')
CONTAINS('NEAR((term1,term2),5) AND NOT term3')
CONTAINS('NEAR((term1,term2),5) AND NEAR((term3,term4),2)')
CONTAINS('NEAR((term1,term2),5) OR NEAR((term3,term4),2, TRUE)')
예를 들면 다음과 같습니다.
CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')
사용자 지정 근접 용어를 일반 근접 용어(term1 NEAR term2), 생성 용어(ISABOUT ...) 또는 가중 용어(FORMSOF ...)와 결합할 수 없습니다.
예: 사용자 지정 근접 용어 사용
다음 예제에서는 샘플 데이터베이스 AdventureWorks2012
의 Production.Document
테이블에서 "bracket"라는 단어와 같은 문서에 "reflector"라는 단어가 포함된 모든 문서 요약을 검색 합니다.
SELECT DocumentNode, Title, DocumentSummary
FROM Production.Document AS DocTable
INNER JOIN CONTAINSTABLE(Production.Document, Document,
'NEAR(bracket, reflector)' ) AS KEY_TBL
ON DocTable.DocumentNode = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 50
ORDER BY KEY_TBL.RANK DESC;
GO
근접 검색에 대한 추가 고려 사항
이 섹션에서는 일반 및 사용자 지정 근접 검색 모두에 영향을 주는 고려 사항에 대해 설명합니다.
검색어의 중복 발생
모든 근접 검색은 항상 겹치지 않는 항목만 찾습니다. 검색어가 중복되는 경우는 일치 항목으로 인정되지 않습니다. 예를 들어, "
A
" 및 "AA
"를 이 순서로 검색하여 최대 두 개의 용어를 검색하는 다음 근접 용어를 생각해 보세요.CONTAINS(column_name, 'NEAR((A,AA),2, TRUE')
가능한 일치 항목은 "
AAA
", "A.AA
" 및 "A..AA
"입니다. "AA
"만 포함하는 행은 일치 항목이 아닙니다.참고 항목
예를 들어
NEAR("mountain bike", "bike trails")
또는(NEAR(comfort*, comfortable), 5)
와 같이 겹치는 단어를 지정할 수 있습니다. 중복되는 용어를 지정하면 가능한 일치 순열이 증가하여 쿼리의 복잡성이 증가합니다. 이렇게 겹치는 용어를 많이 지정하면 리소스가 부족하여 쿼리가 실패할 수 있습니다. 이런 경우 쿼리를 단순화한 다음 다시 시도하십시오.일반 NEAR 및 사용자 지정 NEAR는 최대 거리 지정 여부에 관계없이 모두 단어간 절대 거리가 아닌 논리적 거리를 나타냅니다. 예를 들어 단락 내의 다른 구 또는 문장 내의 용어는 관련성이 낮다는 가정 하에 실제 근접성 여부에 관계없이 동일한 구 또는 문장의 용어보다 멀리 떨어져 처리됩니다. 마찬가지로, 다른 단락의 용어는 더 멀리 떨어져 있는 것으로 취급됩니다. 일치 항목이 문장, 단락 또는 장의 끝에 걸쳐 있는 경우 문서 순위를 지정하는 데 사용되는 간격은 각각 8, 128 또는 1024로 증가합니다.
근접 조건이 CONTAINSTABLE 함수에 의해 순위 영향
CONTAINSTABLE 함수에 NEAR를 사용하면 문서의 길이 대비 적중 수와 각 적중에서 첫 번째와 마지막 검색어 사이의 거리가 각 문서의 순위에 영향을 미칩니다. 일반적인 근접 용어의 경우 일치하는 검색 용어가 >50개의 논리 용어를 제외한 경우 문서에서 반환되는 순위는 0입니다. 정수를 최대 거리로 지정하지 않는 사용자 지정 근접 용어의 경우 간격이 >100 논리 용어인 적중 항목만 포함된 문서는 0의 순위를 받습니다. 사용자 지정 근접 검색 순위에 대한 자세한 내용은 RANK를 사용하여 검색 결과 제한을 참조하세요.
노이즈 단어 변환 서버 옵션
노이즈 단어 변환의 값은 SQL Server가 근접 검색에 지정된 경우 중지 단어를 처리하는 방법에 영향을 줍니다. 자세한 내용은 노이즈 단어 변환 서버 구성 옵션을 참조하세요.
사용되지 않는 제네릭 근접 용어
Important
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. 사용자 지정 근접 단어를 사용하는 것이 좋습니다.
일반 근접 단어를 사용하는 경우 일치 항목이 반환되려면 지정된 검색 단어가 모두 문서에 포함되어 있어야 합니다. 이때 검색 단어 사이의 검색 대상이 아닌 단어 수( 거리)는 고려되지 않습니다. 기본 구문은 다음과 같습니다.
{ search_term { NEAR | ~ } search_term } [ ,...n ]
예를 들어 다음 예제에서는 일치 항목을 생성하려면 'fox' 및 'chicken'이라는 단어가 둘 다 순서대로 나타나야 합니다.
CONTAINS(column_name, 'fox NEAR chicken')
CONTAINSTABLE(table_name, column_name, 'fox ~ chicken')
참고 항목
generic_proximity_term> 구문에 대한 <자세한 내용은 CONTAINS(Transact-SQL)를 참조하세요.
자세한 내용은 이 항목의 뒷부분에 있는 "근접 검색에 대한 추가 고려 사항"을 참조하세요.
일반 근접 용어와 다른 용어 결합
AND(&), OR(|) 또는 AND NOT(&!)을 사용하여 일반 근접 용어를 다른 일반 근접 용어, 간단한 용어 또는 접두사 용어와 결합할 수 있습니다. 예시:
CONTAINSTABLE (Production.ProductDescription,
Description,
'(light NEAR aluminum) OR
(lightweight NEAR aluminum)'
)
일반 근접 용어는 가중치 용어(ISABOUT ...) 또는 세대 용어(FORMSOF ...)와 같은 NEAR((term1,term2),5)
사용자 지정 근접 용어와 결합할 수 없습니다.
예제: 일반 근접 단어 사용
다음 예제에서는 일반 근접 용어를 사용하여 단어 "대괄호"와 같은 문서에서 "리플렉터"라는 단어를 검색합니다.
USE AdventureWorks2012;
GO
SELECT DocumentNode, Title, DocumentSummary
FROM Production.Document AS DocTable INNER JOIN
CONTAINSTABLE(Production.Document, Document,
'(reflector NEAR bracket)' ) AS KEY_TBL
ON DocTable.DocumentNode = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
GO
CONTAINSTABLE의 용어를 반대로 변경하여 동일한 결과를 얻을 수도 있습니다.
CONTAINSTABLE(Production.Document, Document, '(bracket NEAR reflector)' ) AS KEY_TBL
이전 쿼리에서 NEAR 키워드 대신 타일드 문자(~)를 사용하고 동일한 결과를 얻을 수 있습니다.
CONTAINSTABLE(Production.Document, Document, '(reflector ~ bracket)' ) AS KEY_TBL
검색 조건에 단어나 구를 세 개 이상 지정할 수도 있습니다. 예를 들어 다음을 작성할 수 있습니다.
CONTAINSTABLE(Production.Document, Document, '(reflector ~ bracket ~ installation)' ) AS KEY_TBL
즉, "리플렉터"는 "대괄호"와 동일한 문서에 있어야 하고 "대괄호"는 "설치"와 동일한 문서에 있어야 합니다.
참고 항목
CONTAINSTABLE(Transact-SQL)
전체 텍스트 검색을 사용한 쿼리
CONTAINS(Transact-SQL)