【发布时间】:2008-10-09 01:28:43
【问题描述】:
我正在编写一个专门用于音乐播放列表的搜索应用程序。
流派和文件格式因播放列表而异,有时在播放列表中也存在差异。还有一个“同义词”标签的概念(例如,urban 将涵盖 hiphop 和 r&b,但反之则不然)。
以下是搜索词列表和我的预期结果。
gospel:应该返回至少包含一首福音歌曲的所有播放列表。包含所有福音歌曲的播放列表将首先显示。 urban:应该返回所有的 r&b 和 hiphop。再次将所有城市曲目的播放列表排在第一位。 hiphop:应该返回所有 hiphop 但不返回 r&b。 flac:应该返回所有包含 flac 文件的播放列表。从纯flac的开始。 hiphop flac:应该首先返回 hiphop flac,然后是其他 hiphop 音频 hiphop AND flac: 应该只返回 hiphop flac hiphop 音频:应该返回 hiphop flacs、hiphop mp3 等
当我刚刚开始这个项目时,我正在考虑为所有这些编制索引的最佳方式。像 Lucene 这样的全文搜索在这里有用吗?请注意,我没有任何描述这些播放列表的文本,但我可以生成一些。
我正在考虑将所有这些术语组织为“标签”并将它们存储在多对多数据库中。
table: 播放列表 ( pk(id), desc ) 表:标签(pk(id),desc) 表:playlist_has_tag (pk(link_id, tag_id))
解决都市==嘻哈|| rnb 的事情,我可能会添加一个 tag_synonyms 表:
表:tag_synonyms (pk(tag_id, synonym_tag_id))
然后我有两条记录表明 urban 包含 hiphop 和 rnb: urban的标签ID,嘻哈的标签ID urban的tag id,rnb的tag id
我觉得使用这种方法查询可能会非常复杂。
CouchDB 可以在这里使用吗?我目前正在使用 PostgreSQL。有没有一些软件可以让这种事情变得简单?
我希望将来能够深入研究并支持复杂的搜索词,例如:
(嘻哈或房子)和文件类型:mp3 和艺术品:没有
还包含持续时间等内容。
【问题讨论】:
标签: sql mysql search full-text-search search-engine