2009-10-12 3 views
0

Google 데이터베이스 중 하나에 대한 검색을 함께 요청 받았습니다.SQL 서버 검색

사용자가 검색 상자에 입력하는 조건이므로 SQL은 검색의 모든 단어를 분할하고 여러 필드 (아마 2 또는 3)에서 각 단어를 검색해야하며 결과를 가중시켜야합니다 예를 들어 모든 단어가 나타나는 결과가 맨 위에 표시되고 단어가 하나만 나타나면 가중치가 낮아집니다.

당신이 검색하는 경우 예를 들어

은베이스 구글과 같은의 종류 감각의 일종을 만드는

결과이

Rank Field1     Field2 
1:  "This is a demo post" "" 
2:  "demo post"   "" 
3:  "demo"     "post" 
4:  "post"     "" 

희망처럼 순위가 될 것이다 "이것은 데모 게시물입니다" 수색.

어쨌든 나는 이것이 매우 지저분하다고 생각할 수 있습니다.

어떤 제안이 좋을 것입니다.

답변

0

나는 나 각 결과

의 순위 값을 볼 수 있도록, 테이블에 전체 텍스트 인덱스를 생성하고 FREETEXTTABLE 내 검색 결과에 합류 결국

는 SQL 내가 과거에 전체 텍스트 인덱스를 사용하지하지만 결코 그 같은 FullTextTable를 사용할 수 깨달았다이

SELECT 
    Msgs.RecordId, 
    Msgs.Title, 
    Msgs.Body 
FROM 
    [Messages] AS Msgs 
    INNER JOIN FREETEXTTABLE([Messages],Title,@SearchText) AS TitleRanks ON Msgs.RecordId = TitleRanks.[Key]   
ORDER BY 
    TitleRanks.[Key] DESC 

뭔가를 찾고 결국,이 코드를했다 얼마나 얼마나 쉬운 매우 감명을 받았습니다 잘 작동합니다.

+0

각 행이 검색 기준과 얼마나 잘 일치했는지 나타내는 암시 적 열 (범위는 0-100) 인 TitleRanks.Rank별로 주문하는 것이 좋습니다. – JonoW

+0

미안 해요. TitleRanks.Rank DESC (100은 가장 관련성이 높고 0 이상) – JonoW

0

특히 누군가가 특히 긴 구문을 사용하는 경우에는 최적화하기가 어려울지라도 논리적으로는 비교적 쉽게 할 수 있습니다. 여기

이 예에서
SELECT TOP 100 Score, Forename FROM 
(
    SELECT 
     CASE 
      WHEN Forename LIKE '%Kerry James%' THEN 100 
      WHEN Forename LIKE '%Kerry%' AND Forename LIKE '%James%' THEN 75 
      WHEN Forename LIKE '%Kerry%' THEN 50 
      WHEN Forename LIKE '%James%' THEN 50 
     END AS Score, 
     Forename 
    FROM 
     tblPerson 
) [Query] 
WHERE 
    Score > 0 
ORDER BY 
    Score DESC 

, 나는 정확히 일치하는 가치 (100), 두 조건에 일치하는 (하지만 아니라고 말하는거야 ... 내가 손을 가지고 테이블을 기반으로하는 기본 예제 함께) 가치가 75이며 한 단어의 일치 50 가치가있다. 당신이 원하는만큼 복잡하게 만들 수 있습니다 심지어 SOUNDEX 경기를 포함 -하지만 이것은 올바른 방향으로 당신을 가리키는 간단한 예입니다.

0

"Google 유사 검색"은 전체 텍스트 검색을 의미합니다. 확인 해봐!

  • SQL Server fulltext search: language features SQL Server 2008에
  • Understanding SQL Server full-text indexing

  • Getting started with SQL Server 2005 fulltext searchingUnderstanding fulltext indexing on SQL Server
    • , 그것은 완전히 SQL Server 엔진에 통합되어.

      그 전에는 다소 기발한 부가 기능이었습니다. SQL Server 2008로 업그레이드해야하는 또 다른 이유! (그리고 SP1도 이미입니다!)

      마크