如何实现标签搜索?

ehs*_*adi 4 tags algorithm hashtag elasticsearch

我设计了一个新闻中心系统,它读取Rss链接并将全部新闻存储在数据库中.现在我想用标签实现一个搜索系统.每条新闻都有自己的标签.有很多算法可以实现这一点但我不知道什么是最常见的具有最佳性能.目前我正在使用弹性搜索数据库,我使用多个关键字搜索.哪一个是最好的?
1-将标签存储在列表中或带有分隔符的字符串中并在其中进行搜索?2-像关系系统一样工作并有一个标签表,以及一个新闻标签表,用于记录每个新闻标签.一个新闻的5个标签的5个记录 - 另一个我不知道的算法

ami*_*mit 7

好像你想要像倒置索引这样的东西

这是一个索引,对于每个术语(在您的情况下为hashtag),它包含一个包含此主题标签的文档ID列表.

例如,如果您有3个文档:带有哈希标记的d1,d2,d3:

d1: #tag1, #tag2
d2: #tag3
d3: tag3, #tag2
Run Code Online (Sandbox Code Playgroud)

倒排索引将是:

#tag1: d1
#tag2: d1,d3
#tag3: d2,d3
Run Code Online (Sandbox Code Playgroud)

使用倒排索引查找包含特定术语的所有文档(在您的情况下为hashtag),只需查看附加到此术语的列表即可.
此数据结构对于联合(或查询)和交集(和查询)也非常有效.

该DS非常适用于全文搜索的信息检索,并且通常用于半结构化搜索.

有关更多信息,您可以阅读有关信息检索的一般信息.Mannings信息检索简介本书的第一章中代表了这种数据结构.

  • 我是否必须自己实现它,或者像 Elastic Search 这样的数据库可以为我处理这个问题? (2认同)

Asi*_*ov4 4

ElasticSearch 会很好地处理这个问题,并且您有多种方法来实现该行为。

您想要的是新闻文章(父级)与其标签(子级)之间的父子关系。

根据您是否需要在对新闻文章建立索引后更新主题标签,您可以将它们存储在新闻文章中或作为指向新闻文章文档作为其父级的单独文档。请在此处查看更多详细信息: http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/

您提到了将标签存储为列表或逗号分隔字符串之间的选择。使用列表,因为这更惯用,并且 ElasticSearch 可以处理 json 对象(您实际上会分析字符串并将其转换为令牌列表)。