2008-10-09 2 views
3

나는 음악 재생 목록을위한 검색 응용 프로그램을 작성 중입니다.검색 가능성을 위해 데이터를 구성하는 방법

장르 및 파일 형식은 재생 목록과 재생 목록이 다르며 때로는 재생 목록 내에 차이점이 있습니다. '동의어'태그의 개념도 있습니다 (예 : 도시는 힙합과 r &b를 모두 포함하지만 그 반대는 아닙니다).

다음은 검색어 및 예상되는 결과 목록입니다.

복음 : 적어도 하나의 복음의 노래로 모든 재생 목록을 반환해야합니다. 모든 복음 노래가 담긴 재생 목록이 먼저 표시됩니다. 도시 : 모든 r & b 및 hiphop을 반환해야합니다. 다시 모든 도시 트랙과 함께 재생 목록이 먼저 나타납니다. 힙합 : 모든 힙합을 반환해야하지만 r이 아님 & b. flac : flac 파일이 포함 된 모든 재생 목록을 반환해야합니다. 순수한 flac 인 것에서 시작. 힙합 FLAC는 : 다른 힙합 오디오 힙합과 FLAC 다음에, 최초의 힙합 FLACS를 반환해야합니다 : 만 힙합 오디오 힙합 FLACS를 반환해야합니다 : 힙합 FLACS, 힙합 MP3 파일 등을 반환해야

난 그냥이 프로젝트를 시작 해요으로 , 나는이 모든 것을 색인화하는 최선의 방법을 생각하고있다. Lucene과 같은 전문 검색이 여기에 사용됩니까? 참고 이러한 재생 목록을 설명하는 텍스트가 없지만 일부를 생성 할 수 있습니다.

나는이 모든 용어를 "태그"로 구성하고이를 다 대다 (many-to-many) 데이터베이스에 저장하려고 생각하고 있습니다.

테이블 : 플레이리스트 (PK (ID), 내림차순) 테이블 : 태그 (PK (ID), 내림차순) 테이블 : playlist_has_tag (PK (LINK_ID, tag_id))

는 도시 == 힙합을 해결하기 위해, ||

테이블 : tag_synonyms (PK (tag_id, synonym_tag_id)) 나는 도시가 힙합과 RNB을 포함 나타 내기 위해 두 기록이있을 것이다 다음

: 의 도시 태그 ID RNB 일, 나는 어쩌면 tag_synonyms 테이블을 추가합니다 , hiphop의 태그 id 도시의 태그 id, rnb의 태그 id

이 접근 방식을 사용하면 쿼리가 복잡해질 수 있습니다.

CouchDB를 여기에서 사용할 수 있습니까? 현재 PostgreSQL을 사용하고 있습니다. 이런 종류의 소프트웨어를 쉽게 만들 수있는 소프트웨어가 있습니까?

내가 좋아하는 미래의 복잡한 검색어를 드릴 다운하고 지원할 수 있도록하고 싶습니다 :

(힙합 또는 집)과 파일 형식 : MP3와 작품 : 더

또한 기간 같은 것들을 포함하지 등등.

답변

2

검색을 위해 데이터를 구조화하는 방법을 너무 많이 생각하면 앱에서 실제로 사용할 수있는 중요한 검색을 놓칠 수있는 가능성이 있습니다.

(그리고 이것은 경험에서 나온 것입니다.) 결국 모든 종류의 인덱싱 기술을 다시 발명하게됩니다.

나는 루신에 대한 경험이있다 (자바와.net 버전, C 포트가 있었지만 요즘은 얼마나 살아있는 지 잘 모르겠습니다) - 모든 구조에 저장된 데이터로 놀라운 작업을 수행 할 수 있습니다.

나는 소파 db의 모양을 좋아합니다. 얼마나 새롭고 강력한 것으로 실험하고 싶은지에 달려 있습니다. 또는 (현재) 공정하게 단단한 무언가를 찾으십시오 : lucene.

-1

데이터베이스 소프트웨어가 솔루션에서 어떻게 작동하는지 알 수 없습니다.

내가 이것을 구현하는 사람이라면 먼저 모든 관련 데이터가 정규화 된 방식으로 캡처되는지 확인해야합니다. 여기에는 카테고리, 삽화, 가사 등이 포함됩니다.

'복잡한'검색에 대한 아이디어는 실제로 매우 간단합니다.

0

확인, 그냥 여기 브레인 스토밍 -

는 아마도 비트 마스크로 "형식"유형을 저장하는 8 진수 바이너리를 사용하고 계십니까?

http://www.nitrogen.za.org/viewtutorial.asp?id=17

RandB : 1 힙합 : 2 복음 : 4 도시 : 8

지금, 이러한 일들이 부가됩니다. Urban이라는 태그가있는 경우 플래그 필드에 "8"을 저장하지 않고 11을 저장합니다. Urban & & HipHop & & RandB. 이것은 어딘가에서 철자해야 할 "비즈니스 인텔리전스"에 불과합니다.

그런 다음 이진 비교를 사용하여 찾고있는 플래그를 파악할 수 있습니다.

+1

나는 모든 의견이 왜곡 된 이유에 대해 궁금해합니다. 모두가 납득할만한 것 같습니다. – nathaniel

+0

나도 궁금해! 이제 나는 그들 (대부분)을 upvoted했습니다. 공정성, 5 년 후 :-) – KajMagnus

1

사용자가 쿼리를 정의하는 사람이 될 경우 전체 텍스트 인덱스가 가장 잘 작동합니다. 검색 할 수있게하려는 각 속성을 설명하는 맞춤 텍스트 입력란 만 작성하면됩니다. "urban filetype : pdf gospel"을 검색해보십시오.

관련 문제