如何实现标签搜索



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

似乎你想要的东西像倒排索引

这是一个索引,对于每个术语(在您的情况下是hashtag)保存包含该hashtag的文档id列表。

例如,如果您有3个文档:d1,d2,d3和散列标签:

d1: #tag1, #tag2
d2: #tag3
d3: tag3, #tag2

倒排索引将是:

#tag1: d1
#tag2: d1,d3
#tag3: d2,d3

使用倒排索引查找包含特定术语(在您的例子中是hashtag)的所有文档是相当容易的,只需浏览附加到该术语的列表。
这种数据结构对于联合(或查询)和交集(和查询)也非常有效。

这个DS在全文检索的信息检索中非常流行,也经常用于半结构化搜索。

有关更多信息,您可以阅读一般的信息检索。Mannings Introduction to Information Retrieval在本书的第一章中描述了这种数据结构。

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

你想要的是一篇新闻文章(父)和它的标签(子)之间的父子关系。

根据您是否需要在索引您的新闻文章后更新标签,您可以将它们存储在新闻文章中,或者作为指向新闻文章文档的单独文档作为其父文档。详见:http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/

您提到可以选择将标记存储为列表还是以逗号分隔的字符串。使用列表,因为这更习惯,而且ElasticSearch可以处理json对象(实际上您将分析字符串并将其转换为token列表)。

最新更新