2009-04-28 3 views
1

사용자가 검색어를 입력 할 수있는 검색 창이 있습니다. 문자열 전체를 검색하는 테이블 설정이 있습니다. 사용자가 "word, office, microsoft"라고 입력하고 "검색"을 클릭한다고 가정 해 보겠습니다.Asp.net 전체 텍스트 복수 검색 방법론

여러 검색어를 처리하는 가장 좋은 방법입니까?

(pseudocode) 
foreach (string searchWord in searchTerms){  
    select col1 from myTable where contains(fts_column, ‘searchWord’) 
} 

SQL에 iteration을 포함하지 않고 검색하는 방법이 있습니까? 나는 SQL 서버에 대한 호출의 양을 줄이기 위해 노력하고있어.

답변

2

FREETEXT가 도움이 될 수 있습니다. 단어 경계에 따라 문자열을 개별 단어로 분리합니다 (단어 분리). 그렇다면 단 하나의 SQL 호출 만있을 것입니다.

MSDN -- FREETEXT

+0

자유 텍스트 (sqlcolumn, 'TEST1, TEST3')이 클래스를 사용하여이 작업을 완수하기 위해 나타납니다. 감사! – Paulj

0

그럼 당신은 당신의 SQL 쿼리 동적을 만들 수 ...

string [] searchWords = searchTerm.Split(","); 

string SQL = "SELECT col1 FROM myTable WHERE 1=2"; 

foreach (string word in searchWords) 
{ 
    SQL = string.Format("{0} OR contains(fts_column, '{1}')", SQL, word); 
} 

//EXEC SQL... 

은 분명히이 일반적인 경고와 함께 제공/SQL 인젝션 등 ...하지만 원금에 대한 포기는 동적으로 구축 할 것입니다 모든 절을 하나의 쿼리로 적용하십시오.

DB와 상호 작용하는 방식에 따라 분리되지 않은 전체 검색어를 SPROC로 전달한 다음 & 동적 SQL을 저장 프로 시저 내에서 분할하는 것이 가능할 수 있습니다.

0

당신은 당신이 무엇을하는 것이 유사 할 수 : 단지 구분에 따라 검색어를 구문 분석하고 함께 결과를 결합, 각 전화를 걸. 또는 여러 개의 포함 할 수 있습니다.

SELECT Name FROM Products WHERE CONTAINS(Name, @Param1) OR CONTAINS(Name, @Param2) etc. 

아마도 어느 환경에서 더 빠른지 확인하십시오.