2010-01-13 3 views
4

나는 사용자 및 사용자 생성 기사, 화랑 및 영상이있는 웹 사이트에 종사하고있다. 나는 그들 모두를위한 태깅 시스템과 검색을하려고 노력하고있다.어떤 검색/태그 시스템이 더 좋습니까?

처음에는 tbl_articles, tbl_galleries 및 tbl_videos에서 제목, 설명 및 태그 입력란을 생각했습니다. 그런 다음 각각에 대해 다음과 같은 쿼리를 실행하십시오.

select * from tbl_articles where match(title, description, tags) 
    against ('$search' in boolean mode) ORDER BY match(title, description, tags) 
    against ('$search' in boolean mode) DESC, views desc LIMIT 0, 3 

tbl_galleries 및 tbl_videos에 대해 동일한 쿼리가 실행됩니다. 사용자가 사용자 이름을 비교하기 만하면됩니다. 그런 다음 결과 페이지에서 '더보기'버튼 (페이스 북 스타일)을 사용하여 3 개를 각각 표시하십시오.

기사, 갤러리 또는 비디오를 볼 때 관련 콘텐츠에 대한 링크가 있으므로 LIMIT가 '1,3'로 설정된 경우에만 동일한 검색어를 사용하여 자신을 표시하지 않을 것입니다.

l -이 시스템은 어떻습니까? 나는 그들이

  • 이 열 기본 ID와 고유 색인 TAG_NAME이 들어있는 '태그'테이블이있는 this

    찾을 때까지

    나는 시스템에 행복했다.
  • 가 다른 차 ID와 고유 인덱스 '유형'(카테고리)를
  • 을 (내가 사용자/비디오/기사/갤러리를 위해 그것을 사용할 수 생각)이있는 대한 '유형'테이블에 ' '태그'와 '유형'의 외부 ID가 인 기사의 URL이 포함 된 '검색'표가 있습니다.

Q2 (? 나는 URL 예를 들어 article.php ID = ... 대신 난 그냥 저장 관련 외국 ID가 내가 생성 할 수 있도록 전체 URL의 생각) -이를 시스템이 훨씬 더 효율적으로 보인다 ... 어떻게 제목이나 설명을 검색하겠습니까?

Q3 - 다른 나쁜 점은 모든 페이지 뷰에 대해 태그에 가입해야한다는 것입니다. 따라서 훨씬 효율적이지 않을 수 있습니다.

Q4 - 내 시스템은 부울도 검색합니다. '좋아요'쿼리가 더 좋을까요?

Q5 - 사용자를 4 개로 제한하지만 한 단어 (stackoverflow 스타일)를 권장합니다 ... 내 시스템에서 '기차역'에 대한 검색이 ' 기차역 '어떻게하면이 문제를 해결할 수 있을까요?

많은 질문 ... 죄송합니다. 너무 오래되었습니다. 고맙습니다.

답변

2

Q1 - 기사, 태그 및 기사 및 태그와 관련된 링크 테이블에 대해 세 개의 별도 테이블을 사용하는 것이 좋습니다. 기사에 대한 두 개의 테이블과 articles_tags 테이블을 사용하여이 작업을 수행 할 수도 있습니다. articles_tags 테이블에는 articleID 필드가 들어 있고 태그 자체는 복합 키입니다.2 개 또는 3 개의 표를 사용하면 어떤 기사에 주어진 태그가 있고 어떤 태그가 주어진 기사에 할당되어 있는지 쉽게 찾을 수 있습니다.

Q2 - 제목 및 설명 검색은 퍼센트와 함께 "like"또는 정규식 또는 전체 텍스트 검색을 사용하여 수행 할 수 있습니다.

Q3 - 태그 테이블을 다른 태그와 조인하는 것에 대해 걱정하지 마십시오. 크 누스의 말을 바꾸려면 먼저 빌드 한 다음 병목 현상을 찾으십시오. MySQL은 그것이하는 일에 아주 능숙합니다. 그 테이블에 계속해서 반복해서 가입하는 것은 상처를주지 않습니다.

Q4 - 결과에서 벗어나고 싶은 내용에 따라 다릅니다. 일반적으로 실제 데이터를 원한다면 반환 된 행 수를 테스트하여 참인지 거짓인지를 알 수 있습니다.

Q5 - 다시 쿼리를 데이터베이스에 전달하기 전에 "비슷한"구문과 PHP 측의 일부 창의적 정규 표현식을 사용해야합니다.

행운을 빈다!

+0

답장을 보내 주셔서 감사합니다. 한가지 더 질문합니다 ... 제목과 설명을 원래 테이블에 어디에 넣으라고 권장합니까? – Mark

+0

그들은 tag_target_name과 tag_target_url을 사용하여 태그가 지정된 콘텐츠에 대한 링크를 작성하는 것으로 보입니다. 그 자리에 제목과 설명을 넣을 수 있지만, 더 나은 해결책은 모든 정보를 별도의 "articles"테이블에 넣고 article 테이블에있는 행의 id를 tag_targets 테이블에 저장하는 것입니다. 그런 식으로 모든 기사의 모든 태그에 대한 제목과 설명을 반복하지 않습니다. –

관련 문제