我正在使用Sphinx索引我每天从大约100个网站收集的新闻。
每个新闻文档都有id,title,body,date字段。
对于项目的主页,想按主题显示今天的最新新闻。 例如,网站A的新闻标题为:
"Internet of Things Will Burn Privacy for a While, Cerf Warns"
网站B有一个标题:
"Cerf Warns : Internet of Things Will Burn Privacy for a While"
我想将这些新闻显示为包含网站的一个项目。像:
"Internet of Things Will Burn Privacy for a While, Cerf Warns"
Published by : a.com,b.org,...
Sphinx可以吗?
答案 0 :(得分:1)
狮身人面像不会自己做。它不能只是“神奇地”将类似的项目分组为可能重复的项目群集。
(如果标题相同 - 字符的字符,可以分组,但在你的例子中并非如此)
将文档放入群集后 - 例如为其分配“群集ID”。例如,示例中的两个项目将具有相同的cluster-id。多个来源未提及的独特文章将拥有自己的ID。 - 然后,Sphinx可以帮助您搜索或渲染结果 - 使用内置组。
首先,您需要对文档进行分组。
此类事物有专用工具,例如:https://github.com/open-city/dedupe
但是一个非常基本的可以用狮身人面像来构建。在你的例子中可能会正常工作,因为标题包含相同的单词,只是顺序不同。
基本上只需要一个循环通过所有不具有集群ID的文档的脚本,然后针对索引运行sphinx搜索,寻找重复项。如果找到一个,则复制其cluster-id,否则只需分配一个新的唯一ID。
然后可以在插入新闻文档后运行此脚本,以“集群”任何新故事。
精确的狮身人面像查询可以改变。例如,只包括基本查询中的单词,将需要所有相同的单词 - 无论顺序如何。但也可能使用法定人数搜索来要求大多数单词匹配等。
也可能希望按日期过滤,以避免在不同日期重复故事。