2012-01-24 3 views
4

사용자를 가정 랭킹 결과는 내가 사용자를 검색 할는 SQL 서버 여러 단어 검색 및

검색 기준

내 테이블에서 VARCHAR 필드 "설명"이 (최대)로 "빈티지 아우디 자동차"를 입력 Vintage OR Audi 또는 Car로 입력 한 값입니다. 결과는 맨 위에 "설명"의 모든 세 단어를 포함하는 행과 임의의 두 단어가있는 행을 표시 한 다음 임의의 한 단어가있는 행을 표시해야합니다.

이것이 어떻게 달성되는지 알려주십시오.

전 텍스트 검색을 사용하고 있습니다. 명령 CONTAINSTABLE 전체 텍스트 검색을 사용 가능해야한다

+0

FTS에 대해 잘 알고있는 아니, 당신은 정말 여러 쿼리이있을 것이다 (모두가 아닌) 합쳐진 것이다. FTS로 가정하면 3 개의 검색어, 빈티지 및 아우디 및 자동차, 빈티지 및 아우디 + 빈티지 및 자동차, 빈티지 또는 아우디 또는 자동차 – billinkc

+0

순으로 쿼리의 성능을 크게 떨어 뜨릴 수 있습니다. 또한 나는 항상 검색 기준에 오직 세 단어 만 있다고 가정 할 수 없다. –

답변

2

는 :

SELECT * FROM Car 
INNER JOIN CONTAINSTABLE(Car, Description, 'ISABOUT (Vintage weight (.5), Audi weight (0.5), Car weight (0.5))') AS A 
    ON Car.Id = A.[KEY] 
ORDER BY A.[RANK] DESC; 

순위는, 무게에 의해 계산된다 이렇게 설명과 행은 "빈티지 아우디는"행보다 높은 순위를 얻을 것이다 "Audi"라고 묘사되어 있습니다.

0

심지어 나는 테이블 자동차

ALTER TABLE Car ENGINE = MYISAM; 

을 변경 MYISAM 엔진

를 사용하여 해결 같은 문제가 있었다 다음

select * FROM Car WHERE MATCH (Description) AGAINST ('Vintage Audi Car' IN BOOLEAN MODE);