Install-Package SoftCircuits.FullTextSearchQuery
FullTexTearchQuery는 사용자 친화적 인 검색어를 유효한 Microsoft SQL Server 전체 텍스트 검색 쿼리로 변환하는 .NET 클래스 라이브러리입니다. 코드는 쿼리로 인해 SQL Server가 오류를 생성하는 모든 경우를 감지하고 처리하려고 시도합니다.
Microsoft SQL Server는 강력한 전체 텍스트 검색 기능을 제공합니다. 그러나 구문은 특히 비 프로그래머의 경우 다소 비밀입니다. 또한, 상황이 정확하지 않은 경우 SQL Server가 오류를 발생시킬 수있는 많은 조건이 있습니다.
FullTexTearchQuery는 사용자 친화적 인 Google과 같은 검색어를 해당 전체 텍스트 검색 SQL 쿼리 조건으로 변환합니다. 그것의 목표는 잘못 형성된 입력에 대한 예외를 제외하지 않는 것입니다. 그것은 단순히 입력에서 가능한 가장 유효한 쿼리를 구성합니다.
다음 목록은 다양한 입력이 어떻게 변형되는지 보여줍니다.
| 입력 | 산출 | 설명 |
|---|---|---|
| 알파벳 | FORMSOF(INFLECTIONAL, abc) | ABC의 변곡 형태를 찾으십시오. |
| ~ ABC | FORMSOF(THESAURUS, abc) | ABC의 동의어 사전 변형을 찾으십시오. |
| "알파벳" | "abc" | 정확한 용어 ABC를 찾으십시오. |
| +ABC | "abc" | 정확한 용어 ABC를 찾으십시오. |
| "ABC"근처 "def" | "abc" NEAR "def" | 정확한 용어 ABC를 찾으십시오. |
| 알파벳* | "abc*" | ABC로 시작하는 단어를 찾습니다. |
| -ABC def | FORMSOF(INFLECTIONAL, def) AND NOT FORMSOF(INFLECTIONAL, abc) | 변곡 형태의 DEF를 찾으십시오. |
| ABC DEF | FORMSOF(INFLECTIONAL, abc) AND FORMSOF(INFLECTIONAL, def) | ABC와 DEF의 변곡 형태를 찾으십시오. |
| ABC 또는 DEF | FORMSOF(INFLECTIONAL, abc) OR FORMSOF(INFLECTIONAL, def) | ABC 또는 DEF의 변곡 형태를 찾으십시오. |
| < +abc +def> | "abc" NEAR "def" | 정확한 용어 ABC를 찾으십시오. |
| ABC 및 (Def 또는 Ghi) | FORMSOF(INFLECTIONAL, abc) AND (FORMSOF(INFLECTIONAL, def) OR FORMSOF(INFLECTIONAL, ghi)) | ABC와 DEF 또는 GHI의 변곡 형태를 찾으십시오. |
구문 적으로 올바른 쿼리가 생성 된 후에도 SQL Server는 여전히 일부 쿼리에 대한 오류를 생성 할 수 있습니다. 예를 들어, 위의 표에서 -abc def 의 OUPUT가 두 하위 표현을 교환 함을 알 수 있습니다. 이는 NOT FORMSOF(INFLECTIONAL, abc) AND FORMSOF(INFLECTIONAL, def) 때문에 오류가 발생하기 때문입니다. SQL Server는 처음에는 NOT 좋아하지 않습니다. 이 예에서 FullTexTearchQuery는 두 가지 하위 표현을 교체합니다 ( AND 에).
쿼리를 구성한 후 FullTexTearchQuery는이 및 기타 여러 오류 조건을 확인하고 필요에 따라 수정합니다. 다음 표는 이러한 조건을 설명합니다.
| 용어 | 취한 조치 |
|---|---|
| Term1 및 Term2가 아닙니다 | 하위 표현이 교환되었습니다. |
| Term1이 아닙니다 | 표현은 버려졌습니다. |
| 용기가 아니라 용기가 아닙니다 | 노드가 그룹화되거나 (괄호 화)되거나 루트 노드 인 경우 폐기 된 표현. 그렇지 않으면, 부모 노드는이를 유효하게 만드는 다른 서브 표현을 포함 할 수 있습니다. |
| 용기 또는 용어가 아닙니다 | 표현은 버려졌습니다. |
| Term1은 용어가 아닌 근처에 있습니다 | 거의 결합으로 변경되었습니다. |
FullTexTearchQuery는 서브 표현이 term termforms.literal의 내부 노드가 아닌 경우에 거의 모든 결합을 변환합니다.
Transform() 메소드를 사용하여 검색 표현식을 유효한 SQL Server 전체 텍스트 검색 조건으로 변환하십시오. 이 방법은 사용자 친화적 인 검색 쿼리를 사용하여 SQL Server의 CONTAINS 또는 CONTAINSTABLE 기능으로 전달할 수있는 올바르게 형성된 전체 텍스트 검색 조건으로 변환합니다. 쿼리에 유효하지 않은 용어가 포함 된 경우 코드는 유효한 검색 조건을 반환하기 위해 가능한 작업을 수행합니다. 유효한 용어가 없으면이 메소드는 빈 문자열을 반환합니다.
// Pass true to add the standard stop words
FtsQuery ftsQuery = new FtsQuery ( true ) ;
string searchTerm = ftsQuery . Transform ( text ) ; 다음 SQL 쿼리 예제에서 @SearchTerm Transform() 에서 반환 된 문자열에 대한 참조입니다.
SELECT select_list
FROM table AS FT_TBL INNER JOIN
CONTAINSTABLE(table, column, @SearchTerm) AS KEY_TBL
ON FT_TBL . unique_key_column = KEY_TBL.[KEY];알아야 할 한 가지는 SQL Server의 중지 단어 처리입니다. 중지 단어는 a , 및 the 와 같은 단어입니다. 이 단어는 전체 텍스트 색인에 포함되지 않습니다. SQL Server는이 단어가 매우 일반적이며 검색 품질에 추가되지 않기 때문에이 단어를 색인하지 않습니다. 이 단어는 색인화되지 않기 때문에 SQL Server는이 단어와 일치하지 않습니다. 결과적으로 중지 단어를 검색하면 기사에 중지 단어가 나타날 수 있지만 결과는 없습니다!
이를 처리하는 가장 좋은 방법은이 단어를 SQL 쿼리에서 배제하는 것입니다. 쉽게 전체 텍스트 검색을 사용하면 StopWords Collection 속성에 중지 단어를 추가하여이를 수행 할 수 있습니다. 정지 단어는 인용되지 않으면 결과 쿼리에 포함되지 않으므로 쿼리의 중지 단어가 모든 결과를 차단하지 못하게합니다.
StopWords 컬렉션에 스톱 단어의 표준 목록을 추가하는 가장 쉬운 방법은 FtsQuery 생성자에게 true 하는 것입니다. (추가 된 단어를 확인하려면 StopWords 컬렉션을 간단히 검사 할 수 있습니다.) 필요에 따라 언제든지 StopWords 컬렉션을 수정할 수 있습니다.
또는 SQL Server는 위에서 설명한 문제를 방지하기위한 옵션을 제공합니다. 쿼리에 중지 단어 (노이즈 워드)가 포함되어있는 경우에도 SQL Server가 일치하는 것을 반환 할 수 있도록하는 데 노이즈 워드 옵션 옵션을 사용할 수 있습니다. 노이즈 워드 변환을 활성화하려면이 옵션을 1로 설정하십시오. 자세한 내용은 Transform Noise Words 서버 구성 옵션을 참조하십시오.
다음 쿼리는 SQL Server 데이터베이스에서 시스템을 중지하는 데 사용될 수 있습니다.
SELECT ssw . stopword , slg . name
FROM sys . fulltext_system_stopwords ssw
JOIN sys . fulltext_languages slg
ON slg . lcid = ssw . language_id
WHERE slg . lcid = 1033자세한 내용과 코드에 대한 토론은 내 기사를 참조하십시오.