2011-09-15 5 views
2

자조 FAQ 유형 응용 프로그램을 만들고 있는데 최종 요구 사항 중 하나는 FAQ 항목을 검색 할 수 있어야한다는 것입니다.저장 프로 시저를 통해 "키워드 검색"을 처리하는 방법은 무엇입니까?

Topic: Name, Description 
Question: Name, Answer 
Problem: Name, Solution 

세 테이블이 TopicID 칼럼을 통해 주제에 연결되어 있습니다 : 나는 그들의 관련 (즉, 검색) 열이 아래 노트의 세 가지 모델을 가지고있다. 사용자가 문장 (예 : "X를 수행하는 방법") 또는 구문 (예 : "Performing X"또는 "Perform X") 중 하나로 검색 쿼리를 입력 할 수있는 단일 텍스트 상자를 제공하고, 이름 또는 설명/답변/솔루션 필드에 입력 한 단어가있는 모든 주제/질문/문제. 이 모델은 검색 가능한 칼럼만을 가지게 될 것이고 "How"와 같은 일반적인 단어를 걸러내는 것에 대해 걱정할 필요가 없습니다. (정확히는 일치하지만 퍼지 매치가 아니기 때문에 좋을 것입니다.).

내 통제 범위를 벗어난 이유 때문에 저장 프로 시저를 사용해야합니다. 내 질문은 이와 같은 검색을 처리하는 가장 적절한 방법이 무엇일까하는 것입니다. 여러 열에 관한 유사한 질문을 보았지만 실제적으로 가변 개수의 열이 존재하지는 않습니다. 실제 검색 가능한 테이블 당 항상 두 개의 열이 있습니다. 문제는 검색어가 이론상 문장, 구문, 쉼표로 구분 된 용어 목록 (예 : 'x, y, z')과 거의 같을 수 있으므로 검색 용어를 다음과 같이 나눠야합니다. 구성 요소 (예 : 공백으로 분할)를 검색 한 다음 모든 용어에 대해 각 쌍의 열을 검색 하시겠습니까? SQL Server에서 합리적으로 쉽게 할 수 있습니까? 조금 복잡해 보이는 대안은 모든 데이터를 다시 가져온 다음 쿼리를 분할하고 서버 측 코드에서 결과를 필터링하는 것입니다. 이 없으므로 많은 항목이 입력되었지만 조금 느낄 수 있습니다. 더러운 그런 일을 ;-)

+1

전체 텍스트 검색을 보았습니까? http://msdn.microsoft.com/en-us/library/ms142547.aspx –

+0

전체 텍스트 검색으로 해결할 수 있습니다. http://msdn.microsoft.com/en-us/library/ms142571%28SQL. 90 % 29.aspx –

+0

아, 전 텍스트 검색을 완전히 잊었습니다! –

답변

1

creating a new Full Text Catalog 제안하고 해당 카탈로그에 테이블과 열을 할당하십시오. 귀하의 필요에 맞는 올바른 주기로 카탈로그를 업데이트하십시오.

그런 다음 FREETEXT 술어를 사용하여이 카탈로그를 쿼리 할 수 ​​있습니다. '접미사'와 같은 접미사와 일치해야하는 것처럼 들리므로 CONTAINSFREETEXT을 제안하십시오.

이 검색에서 변수를 사용할 수 있으므로 저장된 proc에 쉽게 맞출 수 있습니다.

declare @token varchar(256); 
select @token = 'perform'; 

select * from Problem 
where freetext(Name, @token) 
or  freetext(Solution, @token); 
--this will match 'perform' and 'performing' 
관련 문제