2012-09-14 3 views
0

나는 관련성에 따라 데이터베이스를 조사 할 '스마트'검색 엔진을 만들고 있습니다. 내 시스템은 문장에서 얼마나 많은 단어가 텍스트가 들어있는 'tag_clean'데이터베이스 필드에 해당하는지 계산하고 올바른 결과 (연구마다 하나씩)를 얻으려고합니다.SQL에서 단어 순서를 포함한 관련성에 따라 정렬하는 방법

예를 들어 tag_clean 필드에서 'youpla boom'을 검색하고 'bim 검색'을 테이프하면 'youpla bim'과 같은 다른 항목을 입력하면 두 번째 항목이 표시됩니다.

내 시스템은 단어 당 한 점을 설정하고 가장 관련성 높은 결과를 얻습니다. 모든 것이 효과적이지만 큰 문제는 단어 순서를 완전히 무시한다는 것입니다.

'google 이미지 테스트'및 'google 테스트'가 있고 내 시스템에서 'google 테스트 이미지'를 검색하면 가장 관련성이 가장 높은 것이 첫 번째 것이지만 두 번째 것은 맞습니다.

나는 단어 순서의 중요성을 이해하는 시스템을 원하지만, 나는 그것을 SQL에서하는 방법을 모른다.

SELECT * 
FROM keywords 
WHERE tag_clean LIKE 'google%' 
    AND (static = 0) 
    AND 
    (
     tag_clean LIKE '%google%' 
     OR tag_clean LIKE '%test%' 
     OR tag_clean LIKE '%image%' 
    ) 
    OR 
    (
     tag_clean = 'google test image' 
     AND static = 1 
    ) 
ORDER BY 
    ((CASE WHEN tag_clean LIKE '%google%' THEN 1 ELSE 0 END) 
     + (CASE WHEN tag_clean LIKE '%test%' THEN 1 ELSE 0 END) 
     + (CASE WHEN tag_clean LIKE '%image%' THEN 1 ELSE 0 END)) 
DESC LIMIT 0, 1; 

, 당신에게 사람 :

답변

1

먼저 감사 내가 원시 SQL이 최고라고 확실하지 않다 :

내 SQL 요청의 샘플 (중요한 부분은 마지막에 CASE입니다) 이것을위한 도구. 사용중인 엔진의 전체 텍스트 기능을 조사해야합니다. 텍스트 검색은 오히려 해결 된 문제이며 데이터베이스는 기본 언어의 확장을 통해이 기능을 지원합니다.

계속 하시겠습니까? 문제는 귀하의 구조입니다. '% google test %'와 다른 모든 양방향 조합과 같이 태그를 지울 수있는 절을 추가 할 수 있습니다. 그것은 빠르고 더러운 해결책 일 것입니다.

실제 문제는 관계형 데이터를 단일 필드에 저장한다는 것입니다. 각 문서의 각 키워드에 대해 별도의 행이있는 키워드 표가 있어야합니다. 여기에는 documentID, KeyWord 및 KeyWordPosition과 같은 열이 있습니다. KeyWordPosition을 사용하여 원하는 근접 검색을 시작할 수 있습니다.

그러나 기존 소프트웨어의 전체 텍스트 기능을 조사하는 것이 좋습니다.

+0

당신이 맞아, 나는이 '더러운'해결책에 대해 이미 생각했다. 그러나 나는 깨끗한 것을 원한다. :) 당신의 시스템은 좋을 것입니다. –

관련 문제