전체 텍스트 검색 사용하기¶
검색 함수를 사용하여 VARIANT, OBJECT, ARRAY 열의 필드를 포함해 하나 이상의 테이블에서 지정된 열의 문자 데이터(텍스트) 및 IP 주소를 찾을 수 있습니다. 이 함수는 제공된 검색어 목록을 기반으로 지정된 열 또는 문자열에서 텍스트를 검색합니다. 이 함수는 검색 의미 체계에 따라 텍스트가 지정된 검색어와 일치하는 경우 TRUE를 반환합니다.
대부분의 경우 SEARCH 함수를 SELECT 목록이나 SELECT 구문의 WHERE 절에 지정하여 호출합니다. 함수를 WHERE 절 필터로 사용하는 경우 쿼리는 함수가 TRUE를 반환할 때 행을 반환합니다.
SEARCH 함수는 별도의 설정이나 추가 권한이 필요하지 않습니다. 열의 데이터에 액세스할 수 있는 권한이 있는 역할을 사용하는 경우 SEARCH 함수를 사용하여 해당 데이터를 검색할 수 있습니다.
다음 섹션에서는 SEARCH 함수에 대한 자세한 정보와 이 함수를 사용할 때 쿼리 성능을 최적화하는 방법에 대해 설명합니다.
SEARCH 함수 사용하기¶
SEARCH 함수 는 VARIANT, OBJECT 및 ARRAY 열의 필드를 포함하여 하나 이상의 테이블에서 지정된 열의 문자 데이터(텍스트)를 검색합니다.
SEARCH 함수를 사용하면 텍스트 분석기가 텍스트를 단어나 숫자와 같은 텍스트의 개별 단위인 *토큰*으로 분해합니다. 지정하지 않으면 기본 분석기가 적용됩니다. 분석기는 검색어와 데이터 모두에서 토큰을 추출합니다.
검색어에서 추출된 토큰이 검색 의미 체계에 따라 지정된 열 또는 필드에서 추출된 토큰과 일치하면 함수는 TRUE 를 반환합니다. SEARCH_MODE 함수 인자는 다음 검색 모드 중 하나를 지정합니다.
'OR'- 이 함수는 분리형 의미 체계를 사용합니다. 검색 중인 열 또는 필드에서 추출된 토큰 중* 하나라도* 검색 문자열에서 추출된 토큰 중 *하나*와 일치하면 일치하는 항목이 있는 것입니다. 예를 들어search_string값이'blue red green'`인 경우 이 함수는 검색 중인 열 또는 필드에 ``blue`ORredOR ``green``이 포함된 행에 대해 TRUE를 반환합니다.'AND'- 이 함수는 접속형 의미 체계를 사용합니다. 검색 중인 열 또는 필드 중 1개 이상*에서 추출한 토큰이 검색 문자열에서 추출한 *모든 토큰과 일치하는 경우 일치하는 항목이 있는 것입니다. 일치하는 토큰은 모두 1개의 열 또는 필드에 있어야 하며 여러 열 또는 필드에 분산되어서는 안 됩니다. 예를 들어,search_string값이'blue red green'`인 경우 이 함수는 검색 중인 열 또는 필드 중 1개 이상에 ``blue`ANDredAND ``green``이 포함된 행에 대해 TRUE를 반환합니다.'PHRASE'- 이 함수는 구문 일치 의미 체계를 사용합니다. 검색 중인 열 또는 필드 중 하나 이상*에서 추출한 토큰이 토큰의 순서 및 인접성을 포함하여 검색 문자열에서 추출된 *모든 토큰과 일치하는 경우 일치하는 항목이 있는 것입니다.일치하는 의미 체계는 다음과 같은 차이점을 제외하면 연결형 의미 체계와 동일합니다.
'EXACT'- 이 함수는 정확한 일치 의미 체계를 사용합니다. 검색 중인 열 또는 필드 중 하나 이상*에서 추출한 토큰이 구분 기호를 포함하여 검색 문자열에서 추출된 *모든 토큰과 정확히 일치하는 경우 일치하는 항목이 있는 것입니다.일치 규칙은 다음과 같은 차이점을 제외하면 구문 검색 의미 체계와 동일합니다.
토큰 사이의 구분 기호 문자열은 정확히 일치해야 합니다. 예를 들어,
search_string값이'blue,red,green'`이면 이 함수는 검색 중인 열 또는 필드 중 하나 이상에서 :code:`blue,red,green`을 포함하는 행에 대해 TRUE를 반환합니다. 이 함수는 :code:`blue|red|green또는 :code:`blue, red, green`와 같은 변형에 FALSE를 반환합니다.구분 기호가
search_string값의 첫 번째 또는 마지막 문자인 경우 구분 기호는 일치를 위해 문자처럼 처리됩니다. 따라서 첫 번째 및 마지막 구분 기호의 왼쪽과 오른쪽에 있는 구분 기호는 일치 결과를 가져올 수 있습니다. 예를 들어,search_string값이'[blue]'`이면 이 함수는 :code:`foo [blue] bar,[[blue]]및=[blue].`에 대해 TRUE을 반환하지만 :code:`(blue)또는 :code:`foo blue bar`에 대해서는 그렇지 않습니다.
다음 예제는 기본값 SEARCH_MODE ('OR')과 기본 분석기를 사용하여 텍스트 leopard 에서 문자열 snow leopard 를 검색하는 예제입니다.
SELECT SEARCH('leopard', 'snow leopard');
+-----------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD') |
|-----------------------------------|
| True |
+-----------------------------------+
다음 예제에서는 lion 텍스트에서 snow leopard 문자열을 찾습니다.
SELECT SEARCH('lion', 'snow leopard');
+--------------------------------+
| SEARCH('LION', 'SNOW LEOPARD') |
|--------------------------------|
| False |
+--------------------------------+
다음 예제는 leopard 텍스트에서 snow leopard 문자열을 검색하고 SEARCH_MODE 인자에 'AND' 를 지정합니다.
SELECT SEARCH('leopard', 'snow leopard', search_mode => 'AND');
+---------------------------------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD', SEARCH_MODE => 'AND') |
|---------------------------------------------------------|
| False |
+---------------------------------------------------------+
이 함수와 추가 예제에 대한 자세한 내용은 SEARCH 섹션을 참조하십시오.
SEARCH_IP 함수 사용하기¶
:doc:`SEARCH_IP 함수</sql-reference/functions/search_ip>`는 VARIANT, OBJECT, ARRAY 열의 필드를 포함하여 하나 이상의 테이블에서 지정된 문자열 열의 유효한 IPv4 및 IPv6 주소를 찾습니다. 검색은 사용자가 지정하는 단일 IP 주소를 기반으로 합니다. 이 IP 주소가 지정된 열 또는 필드의 IP 주소와 정확히 일치하는 경우 함수는 TRUE를 반환합니다.
다음 예제에서는 192.0.2.146 텍스트에서 IP 주소 10.10.10.1 을 찾습니다.
SELECT SEARCH_IP('192.0.2.146','10.10.10.1');
+---------------------------------------+
| SEARCH_IP('192.0.2.146','10.10.10.1') |
|---------------------------------------|
| False |
+---------------------------------------+
이 함수와 추가 예제에 대한 자세한 내용은 SEARCH_IP 섹션을 참조하십시오.
SEARCH 함수를 사용하는 쿼리 최적화하기¶
이 함수를 사용하는 쿼리의 성능을 개선하려면 선택적으로 테이블의 특정 열 또는 열 집합에 대해 FULL_TEXT 검색 최적화를 활성화 할 수 있습니다. 검색 최적화를 활성화하면 새로운 검색 액세스 경로 가 구축되고 유지됩니다.