2009-11-30 4 views
4

저는 무료 텍스트 검색을 처음 사용 했으므로 초보자 용 질문을 용서하십시오. 내가 jim smith 반환을 검색 하시나요 예를연결된 열 전체 텍스트 검색?

  • 에 대한 그래서
    FirstName + ' ' + LastName + ' ' + Organization 
    

    를 연결된 세 개의 컬럼에 대한 자유 텍스트 검색을 수행 할

    Create FullText Index on Contacts(
        FirstName, 
        LastName, 
        Organization 
    ) 
    Key Index PK_Contacts_ContactID 
    Go 
    

    : 나는 다음과 같은 전체 텍스트 인덱스가 있다고 가정 Jim Smith라는 이름의 모든 연락처

  • smith ibm을 검색하면 Smith라는 이름의 모든 연락처가 반환됩니다. t IBM

이것은 꽤 일반적인 시나리오처럼 보입니다. 나는 이것이 일하기를 기대했을 것입니다 : smith OR ibm; 이것은 분명히 작동 할 것입니다 : smith OR ibm; 그것은 IBM에서 일하지 않는 많은 스미스와 그 반대로 돌아갑니다. 놀랍게도 smith AND ibm을 검색하면 동일한 결과가 나타납니다.

이 내가 원하는 것을 ...

Select c.FirstName, c.LastName, c.Organization 
from Contacts c 
where Contains(*, 'smith') and Contains(*, 'ibm') 

...하지만 그때는 사용자로부터 오는 쿼리를 매개 변수화 할 수 없습니다 - 나는 단어로 자신을 검색 문자열을 분해하고 조립해야 파리에서는 SQL이 추악하고 안전하지 않습니다.

답변

2

내가 취하는 일반적인 접근 방식은 모든 값을 단일 필드에 넣는 검색보기 또는 계산 된 열 (트리거 사용)을 만드는 것입니다.

내가하는 다른 일은 Lucene/Solr와 같은 전체 텍스트 검색 엔진을 사용하는 것입니다.

+1

감사합니다. 계산 된 열/트리거 방식을 사용하여 SearchText 필드를 채우고 색인을 생성했습니다. –

0

부울 연산자는 FREETEXT가 아닌 CONTAINS에만 지원됩니다.

CONTAINSTABLE을 사용하여 AND 쿼리를 사용해보십시오.

+0

FREETEXTTABLE을 CONTAINSTABLE로 바꾸면 아무런 결과도 반환하지 않습니다. "스미스"와 "ibm"을 모두 포함하는 열이 없기 때문입니다. "스미스"는성에 있고 "ibm"은 조직에 있습니다. –