NEAR를 사용하여 근접 단어 검색Search for Words Close to Another Word with NEAR

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse CONTAINS 조건자 또는 CONTAINSTABLE 함수에서 근접 단어 NEAR를 사용하여 단어나 구를 검색할 수 있습니다. You can use the proximity term NEAR in a CONTAINS predicate or CONTAINSTABLE function to search for words or phrases near one another.

NEAR 개요Overview of NEAR

NEAR에는 다음과 같은 기능이 포함되어 있습니다.NEAR has the following features:

  • 첫 번째 검색 단어와 마지막 검색 단어를 분리하는 검색 대상이 아닌 단어의 최대 수를 지정할 수 있습니다.You can specify the maximum number of non-search terms that separate the first and last search terms.

  • 임의의 순서 또는 특정 순서로 단어 또는 구를 검색할 수 있습니다.You can search for words or phrases in any order, or you can search for words and phrases in a specific order.

  • 일치 항목이 되기 위한 첫 번째 검색 단어와 마지막 검색 단어를 분리하는 검색 대상이 아닌 단어의 최대 수( 최대 거리)를 지정할 수 있습니다.You can specify the maximum number of non-search terms, or maximum distance, that separates the first and last search terms in order to constitute a match.

  • 최대 단어 수를 지정하는 경우 일치 항목이 지정된 순서로 검색 단어를 포함하도록 지정할 수도 있습니다.If you specify the maximum number of terms, you can also specify that matches must contain the search terms in the specified order.

일치 항목이 되려면 텍스트 문자열은 다음 조건을 충족해야 합니다.To qualify as a match, a string of text must:

  • 지정된 검색 단어 중 하나로 시작하고 지정된 다른 검색 단어 중 하나로 끝납니다.Start with one of the specified search terms and end with the one of the other specified search terms.

  • 지정된 검색 단어를 모두 포함합니다.Contain all of the specified search terms.

  • 중지 단어를 포함하여 첫 번째 검색 단어와 마지막 검색 단어 사이에 있는 검색 대상이 아닌 단어의 수는 최대 거리가 지정된 경우 최대 거리보다 작거나 같아야 합니다.The number of non-search terms, including stopwords, that occur between the first and last search terms must be less than or equal to the maximum distance, if the maximum distance is specified.

NEAR 구문Syntax of NEAR

NEAR의 기본 구문은 다음과 같습니다.The basic syntax of NEAR is:

 NEAR (  

 {  

 *search_term* [ ,…*n* ]  

 |  

 (*search_term* [ ,…*n* ] ) [, <maximum_distance> [, <match_order> ] ]  

 }  

 )  

구문에 대한 자세한 내용은 CONTAINS(Transact-SQL)를 참조하세요.For more info about the syntax, see CONTAINS (Transact-SQL).

Examples

예 1Example 1

예를 들어 다음과 같이 'Smith'와의 사이에 최대 두 단어가 있는 'John'을 검색할 수 있습니다.For example, you could search for 'John' within two terms of 'Smith', as follows:

... CONTAINS(column_name, 'NEAR((John, Smith), 2)')

일치하는 문자열의 예로는 "John Jacob Smith" 및 "Smith, John" 등이 있습니다.Some examples of strings that match are "John Jacob Smith" and "Smith, John". 문자열 "John Jones knows Fred Smith"는 두 단어 사이에 검색 대상이 아닌 단어가 3개 있으므로 일치 항목이 아닙니다.The string "John Jones knows Fred Smith" contains three intervening non-search terms, so it is not a match.

특정 순서로 단어를 찾으려면 예에 있는 근접 단어를 NEAR((John, Smith),2, TRUE). 로 변경합니다. 이제 "John"와 두 단어 거리 이내에서 "Smith"을 검색하지만 "John"이 "Smith"의 앞에 있어야 합니다.To require that the terms be found in the specified order, you would change the example proximity term to NEAR((John, Smith),2, TRUE). This searches for "John" within two terms of "Smith" but only when "John" precedes "Smith". 영어와 같이 왼쪽에서 오른쪽으로 읽는 언어에서 일치하는 문자열의 예로는 "John Jacob Smith"가 있습니다.In a language that reads from left to right, such as English, an example of a string that matches is "John Jacob Smith".

아랍어나 히브리어와 같이 오른쪽에서 왼쪽으로 읽는 언어에서는 전체 텍스트 엔진이 지정된 단어를 반대 방향으로 적용합니다.Note that for a language that reads from right to left, such as Arabic or Hebrew, the Full-Text Engine applies the specified terms in reverse order. 또한 SQL Server Management StudioSQL Server Management Studio 의 개체 탐색기는 오른쪽에서 왼쪽으로 읽는 언어로 지정된 단어의 표시 순서를 자동으로 전환합니다.Also, Object Explorer in SQL Server Management StudioSQL Server Management Studio automatically reverses the display order of words specified in right-to-left languages.

예 2Example 2

다음 예에서는 Production.Document 샘플 데이터베이스의 AdventureWorks 테이블에서 "bracket"이라는 단어와 동일한 문서에 "reflector"라는 단어가 들어 있는 모든 문서 요약을 검색합니다.The following example searches the Production.Document table of the AdventureWorks sample database for all document summaries that contain the word "reflector" in the same document as the word "bracket".

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  

최대 거리를 측정하는 방법How maximum distance is measured

10 또는 25와 같은 특정 최대 거리는 지정된 문자열에서 중지 단어를 포함하여 첫 번째 검색 단어와 마지막 검색 단어 사이에 있는 검색 대상이 아닌 단어의 수를 결정합니다.A specific maximum distance, such as 10 or 25, determines how many non-search terms, including stopwords, can occur between the first and last search terms in a given string. 예를 들어 NEAR((dogs, cats, "hunting mice"), 3) 는 검색 대상이 아닌 단어 수가 총 3개("enjoy", "but" 및 "avoid")인 다음 행을 반환합니다.For example, NEAR((dogs, cats, "hunting mice"), 3) would return the following row, in which the total number of non-search terms is three ("enjoy", "but", and "avoid"):

"Cats enjoy hunting mice``, but avoid dogs``.""Cats enjoy hunting mice``, but avoid dogs``."

이 근접 단어는 검색 대상이 아닌 단어가 4개("enjoy", "but", "usually" 및 "avoid")여서 최대 거리가 초과된 다음 행을 반환하지 않습니다.The same proximity term would not return the following row, because the maximum distance is exceeded by the four non-search terms ("enjoy", "but", "usually", and "avoid"):

"Cats enjoy hunting mice``, but usually avoid dogs``.""Cats enjoy hunting mice``, but usually avoid dogs``."

NEAR와 다른 용어 결합Combine NEAR with other terms

NEAR를 일부 다른 용어와 결합할 수 있습니다.You can combine NEAR with some other terms. AND(&), OR(|) 또는 AND NOT(&!)을 사용하여 사용자 지정 근접 단어를 다른 사용자 지정 근접 단어, 단순 단어 또는 접두사 단어와 결합할 수 있습니다.You can use AND (&), OR (|), or AND NOT (&!) to combine a custom proximity term with another custom proximity term, a simple term, or a prefix term. 예를 들어For example:

  • CONTAINS('NEAR((term1,term2),5) AND term3')CONTAINS('NEAR((term1,term2),5) AND term3')

  • CONTAINS('NEAR((term1,term2),5) OR term3')CONTAINS('NEAR((term1,term2),5) OR term3')

  • CONTAINS('NEAR((term1,term2),5) AND NOT term3')CONTAINS('NEAR((term1,term2),5) AND NOT term3')

  • CONTAINS('NEAR((term1,term2),5) AND NEAR((term3,term4),2)')CONTAINS('NEAR((term1,term2),5) AND NEAR((term3,term4),2)')

  • CONTAINS('NEAR((term1,term2),5) OR NEAR((term3,term4),2, TRUE)')CONTAINS('NEAR((term1,term2),5) OR NEAR((term3,term4),2, TRUE)')

    예:For example,

CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')  

NEAR와 생성 용어(ISABOUT ...) 또는 가중치 용어(FORMSOF ...)를 결합할 수 없습니다.You can't combine NEAR with a generation term (ISABOUT …) or a weighted term (FORMSOF …).

근접 검색에 대한 추가 정보More info about proximity searches

  • 검색 단어가 겹쳐서 나타남Overlapping occurrences of search terms

    모든 근접 검색은 검색 단어가 겹치지 않는 경우만 검색합니다.All proximity searches always look for only non-overlapping occurrences. 검색 단어가 겹쳐서 나타나는 경우 일치 항목이 될 수 없습니다.Overlapping occurrences of search terms never qualify as matches. 예를 들어 다음 근접 단어는 최대 거리를 두 단어로 지정하여 "A" 및 "AA"를 이 순서대로 검색합니다.For example, consider the following proximity term, which searches "A" and "AA" in this order with a maximum distance of two terms:

    CONTAINS(column_name, 'NEAR((A,AA),2, TRUE')  
    

    가능한 일치 항목은 "AAA", "A.AA" 및 "A..AA" 등입니다.The possible matches are as "AAA", "A.AA", and "A..AA". "AA"만 포함하는 행은 일치 항목이 아닙니다.Rows containing just "AA" would not match.

    참고

    예를 들어 NEAR("mountain bike", "bike trails") 또는 (NEAR(comfort*, comfortable), 5)와 같이 겹치는 단어를 지정할 수 있습니다.You can specify terms that overlap, for example, NEAR("mountain bike", "bike trails") or (NEAR(comfort*, comfortable), 5). 겹치는 단어를 지정하면 일치하는 항목의 가능한 조합이 늘어나므로 쿼리의 복잡도가 높아집니다.Specifying a overlapping terms increases the complexity of the query by increasing the possible match permutations. 이렇게 겹치는 단어를 많이 지정하면 쿼리가 리소스 부족으로 실패할 수 있습니다.If you specify a large number of such overlapping terms, the query can run out of resources and fail. 이런 경우 쿼리를 단순화한 다음 다시 시도하십시오.If this occurs, simplify the query and try again.

  • NEAR는 최대 거리 지정 여부에 관계없이 용어 간 절대 거리가 아닌 논리적 거리를 나타냅니다.NEAR (regardless of whether a maximum distance is specified) indicates the logical distance between terms, rather than the absolute distance between them. 예를 들어 단락 내에서 다른 구 또는 문장에 있는 단어는 관련이 더 적다고 가정하므로 실제 근접성에 관계없이 같은 구 또는 문장에 있는 단어보다 더 멀리 떨어져 있는 것으로 간주됩니다.For example, terms within different phrases or sentences within a paragraph are treated as farther apart than terms in the same phrase or sentence, regardless of their actual proximity, on the assumption that they are less related. 마찬가지로 다른 단락에 있는 단어는 이보다도 더 많이 떨어져 있는 것으로 간주됩니다.Likewise, terms in different paragraphs are treated as being even farther apart. 일치 항목이 문장, 단락 또는 장의 끝을 넘어가면 문서의 순위를 지정하는 데 사용되는 간격이 각각 8, 128 또는 1024만큼 늘어납니다.If a match spans the end of a sentence, paragraph, or chapter, the gap used for ranking a document is increased by 8, 128, or 1024, respectively.

  • CONTAINSTABLE 함수의 순위 지정에 근접 단어가 미치는 영향Impact of proximity terms on ranking by the CONTAINSTABLE function

    CONTAINSTABLE 함수에서 NEAR를 사용하는 경우 문서 길이에 상대적인 문서 내 적중 수와 각 적중의 첫 번째 검색 단어와 마지막 검색 단어 간 거리가 각 문서의 순위에 영향을 줍니다.When NEAR is used in the CONTAINSTABLE function, the number of hits in a document relative to its length as well as the distance between the first and last search terms in each of the hits affects the ranking of each document. 일반 근접 단어의 경우 일치하는 검색 단어가 논리적 단어 50개보다 더 떨어져 있으면 문서에 대해 반환되는 순위는 0입니다.For a generic proximity term, if the matched search terms are >50 logical terms apart, the rank returned on a document is 0. 최대 거리로 정수를 지정하지 않은 사용자 지정 근접 단어의 경우 간격이 논리적 단어 100개보다 더 떨어져 있는 적중만 포함된 문서의 순위는 0이 됩니다.For a custom proximity term that does not specify an integer as the maximum distance, a document that contains only hits whose gap is >100 logical terms will receive a ranking of 0. 사용자 지정 근접 검색의 순위 지정에 대한 자세한 내용은 Limit Search Results with RANK을 참조하십시오.For more information about ranking of custom proximity searches, see Limit Search Results with RANK.

  • 의미 없는 단어 변환 서버 옵션The transform noise words server option

    근접 검색에 중지 단어가 지정된 경우 의미 없는 단어 변환 의 값은 SQL ServerSQL Server 에서 중지 단어를 처리하는 방법에 영향을 미칩니다.The value of transform noise words impacts how SQL ServerSQL Server treats stopwords if they are specified in proximity searches. 자세한 내용은 transform noise words Server Configuration Option을 참조하세요.For more information, see transform noise words Server Configuration Option.

참고 항목See Also

CONTAINS(Transact-SQL)CONTAINS (Transact-SQL)
CONTAINSTABLE(Transact-SQL) CONTAINSTABLE (Transact-SQL)
전체 텍스트 검색을 사용한 쿼리Query with Full-Text Search