적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
근접 용어NEAR를 CONTAINS 조건자나 CONTAINSTABLE 함수에서 사용하여 서로 가까운 단어 또는 구를 검색할 수 있습니다.
NEAR 개요
NEAR의 기능은 다음과 같습니다.
첫 번째 검색어와 마지막 검색어를 구분하는 비 검색어의 최대 수를 지정할 수 있습니다.
어떤 순서로든 단어나 구를 검색하거나 특정 순서로 단어와 구를 검색할 수 있습니다.
일치 항목을 구성하려면 첫 번째 검색어와 마지막 검색어 사이에 최대 몇 개의 비검색어 또는 최대 거리를 지정할 수 있습니다.
최대 단어 수를 지정하는 경우 일치 항목이 지정된 순서로 검색 단어를 포함하도록 지정할 수도 있습니다.
일치 항목으로 간주되기 위해 텍스트 문자열이 다음을 수행해야 합니다.
지정된 검색어 중 하나로 시작하고 지정된 다른 검색어 중 하나로 끝납니다.
지정된 검색 단어를 모두 포함합니다.
첫 번째 검색어와 마지막 검색어 사이에 발생하는 불용어를 포함한 비검색어의 수는, 최대 거리가 지정된 경우, 최대 거리 이하여야 합니다.
NEAR 구문
NEAR의 기본 구문은 다음과 같습니다.
NEAR (
{
*search_term* [ ,...*n* ]
|
(*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]
}
)
구문에 대한 자세한 내용은 CONTAINS (Transact-SQL)을 참조하세요.
예제
예 1
예를 들어, 다음과 같이 '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의 개체 탐색기는 오른쪽에서 왼쪽으로 읽는 언어의 단어 표시 순서를 자동으로 전환합니다.
예제 2
다음 예제에서는 샘플 데이터베이스 Production.Document
의 AdventureWorks
테이블에서 "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
최대 거리를 측정하는 방법
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``.
"
NEAR를 다른 용어와 결합
NEAR를 다른 용어와 결합할 수 있습니다. 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')
"컨테인즈('네어((term1, term2),5) 그리고 네어((term3, term4),2)')"
CONTAINS('근접((term1, term2),5) OR 근접((term3, term4),2, 참)')
예를 들면 다음과 같습니다.
CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')
NEAR를 세대 용어(ISABOUT ...) 또는 가중 용어(FORMSOF ...)와 결합할 수 없습니다.
근접 검색에 대한 자세한 정보
검색어의 중복 발생
모든 근접 검색은 항상 겹치지 않는 항목만 찾습니다. 검색어가 중복되는 경우는 일치 항목으로 인정되지 않습니다. 예를 들어, "
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(최대 거리 지정 여부와 관계없이)는 용어 간의 절대 거리가 아닌 논리적 거리를 나타냅니다. 예를 들어 단락 내의 다른 구 또는 문장 내의 용어는 관련성이 낮다는 가정 하에 실제 근접성 여부에 관계없이 동일한 구 또는 문장의 용어보다 멀리 떨어져 처리됩니다. 마찬가지로, 다른 단락의 용어는 더 멀리 떨어져 있는 것으로 취급됩니다. 일치 항목이 문장, 단락 또는 장의 끝에 걸쳐 있는 경우 문서 순위를 지정하는 데 사용되는 간격은 각각 8, 128 또는 1024로 증가합니다.
근접 용어가 CONTAINSTABLE 함수의 순위에 미치는 영향
CONTAINSTABLE 함수에 NEAR를 사용하면 문서의 길이 대비 적중 수와 각 적중에서 첫 번째와 마지막 검색어 사이의 거리가 각 문서의 순위에 영향을 미칩니다. 일반적인 근접 용어의 경우, 일치하는 검색 용어가 논리 용어에서 >50개 떨어져 있으면, 문서에서 반환되는 순위는 0입니다. 사용자 지정 근접 용어에서 최대 거리를 정수로 지정하지 않은 경우, 간격이 >100 논리 용어인 적중 항목만 포함하는 문서는 0의 순위를 받습니다. 사용자 지정 근접 검색 순위에 대한 자세한 내용은 RANK를 사용하여 검색 결과 제한을 참조하세요.
노이즈 단어 변환 서버 옵션
노이즈 단어 변환의 값은 SQL Server가 근접 검색에 지정된 경우 중지 단어를 처리하는 방법에 영향을 줍니다. 자세한 내용은 노이즈 단어 변환 서버 구성 옵션을 참조하세요.
참고 항목
CONTAINS(Transact-SQL)
CONTAINSTABLE(Transact-SQL)
전체 텍스트 검색을 사용한 쿼리