sql - 如何为可搜索性构建数据

标签 sql mysql search full-text-search search-engine

我正在编写一个专门用于音乐播放列表的搜索应用程序。

流派和文件格式因播放列表而异,有时播放列表内也存在差异。还有一个“同义”标签的概念(例如,urban 会涵盖 hiphop 和 r&b,但反之则不然)。

下面是搜索词列表和我的预期结果。

福音:应该返回所有播放列表,其中至少包含一首福音歌曲。包含所有福音歌曲的播放列表将首先显示。 urban:应该返回所有 r&b 和 hiphop。同样,包含所有城市轨道的播放列表将排在第一位。 hiphop:应该返回所有 hiphop 但不返回 r&b。 flac:应该返回所有包含 flac 文件的播放列表。从纯 flac 开始。 hiphop flac:应该首先返回 hiphop flacs,然后是其他 hiphop 音频 hiphop AND flac:应该只返回 hiphop flacs hiphop 音频:应返回 hiphop flacs、hiphop mp3 等

因为我刚刚开始这个项目,所以我正在考虑为所有这些编制索引的最佳方式。像 Lucene 这样的全文搜索在这里有用吗?请注意,我没有任何描述这些播放列表的文本,但我可以生成一些。

我正在考虑将所有这些术语组织为“标签”并将它们以多对多方式存储在数据库中。

表:播放列表 ( pk(id), desc ) 表:标签(pk(id),desc) 表:playlist_has_tag ( pk(link_id, tag_id) )

解决都市==hiphop || rnb 事情,我可能会添加一个 tag_synonyms 表:

表:tag_synonyms ( pk(tag_id, synonym_tag_id) )

然后我有两个记录表明 urban 包含 hiphop 和 rnb: urban 的标签 id,hiphop 的标签 id urban的标签id,rnb的标签id

我觉得使用这种方法查询可能会变得非常复杂。

这里可以使用 CouchDB 吗?我目前正在使用 PostgreSQL。有没有一些软件可以让这种事情变得简单?

我希望将来能够深入分析和支持复杂的搜索词,例如:

(hiphop 或 house)AND filetype:mp3 AND artwork:no

并且还包含诸如持续时间等内容。

最佳答案

如果您在如何构建用于搜索的数据方面考虑太多,您很可能会错过您本可以在您的应用中真正使用的重要搜索。

或者(这是根据经验得出的)您最终会重新发明各种索引技术。

我有一些使用 lucene 的经验(有 java 和 .net 版本,有一个 C 端口,但我不确定它现在有多活跃)——它可以用存储在任何结构中的数据做一些惊人的事情.

我喜欢 couch db 的外观,这取决于您想要尝试新的和强大的东西的程度,或者选择(当前)相当成熟的东西:lucene。

关于sql - 如何为可搜索性构建数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/185597/

相关文章:

mongodb - MongoDB 文本索引的词干提取无法正常工作

java - 如何在网格中导航寻找最接近的位置?

sql - 查找不在该月第一天或最后一天的日期

python - 插入多个条目后获取主键列表

c# - 当前上下文中不存在 FileUpload1

mysql - SQL 按顺序排列

search - IntelliJ IDEA 全局搜索

sql - SQL Server 中按两列计数?

sql - Delphi与SQL Server之间的冲突

sql - 如何使用递归数据批量更新表