2009-03-05 5 views
9

OK 나는이전체 텍스트 검색 답변입니까? int 형과 기록</strong></p> <p><strong>제목의 고유 ID - - 항목</strong></p> <p><strong>설명의 이름

ID 같이 보입니다 MySQL 데이터베이스를 가지고 - 아이템 설명

키워드와 제목을 모두 검색하고 싶습니다. 현재 사용하고 있습니다. '항목'에서

SELECT * 어디 % 키 % LIKE 제목

그리고 이것은 작동하지만 검색으로, 데이터베이스에별로 거기로 "이 키가" "이 그 키를 찾을 수 없습니다 "나는 사이트의 검색 엔진을 향상시키고 싶고 어떤 종류의 순위 시스템을 추가 할 수도있다. (그러나 그것은 먼 곳이다).

질문에 "전 텍스트 검색"이라고 불리는 것에 대해 들었습니다. 데이터베이스 설계의 주요 요소 였지만이 주제에 대한 뉴비였습니다. ...

1) 유용 할 것이라고 생각하십니까?

그리고 추가 questron

... 내가 올바른 방향으로 날 가리 킵니다 데이터베이스 설계/검색 엔진 디자인에 대해 읽어 무엇을 할 수

2).

는 관련이 있다면 사이트가 현재 (프레임 워크없이 IE) stright의 PHP로 작성 (루비 온 레일즈로 변환의 생각 죽이 넘은 내 마음)

갱신

감사합니다 전체, 전체 텍스트 검색을 위해 가겠습니다. 그리고 이것을 나중에 발견 한 사람을 위해 전체 텍스트 검색에서 좋은 내용을 찾았습니다 (tutorial).

답변

9

'% keyword %'유형 검색의 문제점은 해당 열에 색인을 생성하더라도 정규 표에서 효율적으로 검색 할 수 없다는 것입니다. 전화 번호부에서 그 문자열을 어떻게 보는지 생각해보십시오. 실제로는 최적화 할 방법이 없습니다. 즉, 전체 전화 번호부를 스캔해야합니다. 이것은 MySQL이 수행하는 전체 테이블 스캔입니다.

'키워드 %'로 변경하고 색인을 사용하면 매우 빠르게 검색 할 수 있습니다. 그것은 이것이 당신이 원하는 것이 아닌 것처럼 들립니다.

프로

  • 매우 빠른
  • 결과를 반환 : 염두에 너무

    , 나는 몇 가지 장점과 단점을 꽤 검색/전체 텍스트 인덱싱을 사용하고, 여기있다 관련순으로 정렬 (기본적으로 어떤 정렬도 사용할 수 있지만)

  • 중지 단어를 사용할 수 있습니다.

    • 만 MyISAM 테이블과 함께 작동

    단점 (기본 최소 4 글자입니다) 당신이 있도록

  • 는 WHERE 절에 다른 SQL이 필요 무시됩니다 너무 짧은
  • 단어 기존 쿼리를 수정해야합니다.

Here is some good documentation on full-text searching (예를 들어, '단어'만 '단어를'키워드 '를 일치하지 않는) 부분 문자열과 일치하지 않습니다.

또 다른 옵션은 Sphinx과 같은 검색 시스템을 사용하는 것입니다. 매우 빠르고 유연합니다. 그것은 검색을 위해 최적화되어 MySQL과 잘 통합됩니다.

+0

스핑크스와 같은 것을 사용하는 것에 대해 감사드립니다. 그러나 엄청난 시간이 걸리지 않는 한 솔직히 말해서 어떻게 작동하는지 이해하는 방법으로 직접 제작하고 싶습니다. –

+0

우리 응용 프로그램 중 하나에서 스핑크스 구현에 가까워지고 있습니다. 우리는 엄청난 양의 데이터를 검색합니다. 우리는 잠시 동안 전문 검색을 사용했지만 거래를 위해 innodb로 이동해야했습니다. 그러나 풀 텍스트는 구현하기 쉽고 정말 빠릅니다. – jonstjohn

1

Zend_Lucene을 고려해 볼 수도 있습니다. 순수한 PHP이기 때문에 Sphinx보다 통합이 약간 쉽습니다.

+0

은 그것을 권장하지 않습니다. – deresh

2

필자는 MySQL 전체 텍스트로 충분하다고 생각하지만, 지원 기능이 잘 확장되지 않는다는 점은 주목할 가치가 있습니다. 평균 크기의 문서의 경우 수십만 줄의 작은 테이블 크기에서는 사용할 수 없게됩니다. 이것이 더 이상 문제가 될 수도 있다고 생각한다면 아마도 스핑크스를 살펴 봐야 할 것입니다. 개인적으로 비록 java lucene을 사용하여 내 솔루션을 구현하는 것을 선호하지만 MYSQL 사용자를위한 기본 표준이되고 있습니다. :)

전체 텍스트 검색은 기본적으로 LIKE '% keyword %'- search와 (과) 근본적으로 다릅니다. LIKE- 검색 전체 텍스트 인덱싱과 달리 서로 바로 옆에 나타나지 않아도되는 몇 가지 키워드를 검색 할 수 있습니다. 예를 들어 Google과 같은 표준 검색 엔진은 전체 텍스트 검색 엔진입니다.