NEAR를 사용하여 다른 단어에 가까운 단어 검색
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance
CONTAINS 조건자 또는 CONTAINSTABLE 함수에서 ‘근접 단어’ NEAR를 사용하여 단어나 구를 검색할 수 있습니다.
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
다음 예제에서는 샘플 데이터베이스 AdventureWorks
의 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
최대 거리를 측정하는 방법
10 또는 25와 같은 특정 최대 거리는 지정된 문자열의 첫 번째 검색어와 마지막 검색 단어 사이에 발생할 수 있는 중지 단어를 포함하여 검색되지 않는 용어 수를 결정합니다. 예를 들어 NEAR((dogs, cats, "hunting mice"), 3)
는 검색되지 않는 용어의 총 수가 3개("enjoy
", "but
" 및 "avoid
")인 다음 행을 반환합니다.
동일한 근접 용어는 최대 거리가 4개의 비검색어("enjoy
", "but
", "usually
", 및"avoid
")로 인해 초과되므로 다음 행을 반환하지 않습니다.
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')
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')
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)
전체 텍스트 검색을 사용한 쿼리