【问题标题】:how to structure data for searchability如何构造数据以实现可搜索性
【发布时间】: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


    【解决方案1】:

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

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

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

    我喜欢 couch db 的外观,这取决于您想尝试多少新的和强大的东西,或者选择(目前)相当坚固的东西:lucene。

    【讨论】:

      【解决方案2】:

      如果您的用户将成为定义查询的人,那么全文索引将为您提供最佳服务。只需创建一个自定义文本字段来描述您希望可搜索的每个属性,例如“urban filetype:pdf 福音”并进行搜索。

      【讨论】:

        【解决方案3】:

        好的,这里只是头脑风暴--

        也许使用八进制或二进制将“格式”类型存储为位掩码?

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

        兰德:1 嘻哈:2 福音:4 市区:8

        现在,这些东西是附加的。您知道,如果某物被标记为 Urban,您不会在标志字段中存储“8”,但您将存储 11...Urban && HipHop && RandB。这只是您必须在某处说明的一点“商业智能”。

        然后您可以使用二进制比较来确定您要查找的标志。

        【讨论】:

        • 我很好奇为什么每条评论都被下调了——他们似乎都很有说服力。
        • 我也想知道!现在我已经对他们(大部分)投了赞成票。 5年后终于公平了:-)
        【解决方案4】:

        我看不出数据库软件将如何在您的解决方案中发挥作用。

        如果我是实现这一点的人,我会首先确保以标准化方式捕获所有相关数据。这将包括类别、艺术作品、歌词等。

        这样做的主要优点是您对“复杂”搜索的想法实际上变得非常简单。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-10
          • 1970-01-01
          • 2013-02-09
          • 2022-10-13
          • 2014-06-05
          相关资源
          最近更新 更多