返回作者按满足标签条件的出版物数量排序

时间:2018-04-13 11:25:10

标签: neo4j cypher

上下文 我有作家。每位作者都出版了一本或几本出版物(可能超过500种)。 每个出版物都包含标签(平均值为50,最大值为445)。

我的第一个问题: 我想知道创建查询以返回作者是多么容易,这些查询按照有关选择标记的出版物数量(1到10个标记)排序。

例如,如果标准是2个标签,我希望作者发布的出版物都有两个标签。

标签 出版物,作者和标签将是标签。 我会在出版物和作者之间建立关系。在出版物和标签之间。

我很高兴听到任何帮助我的建议。谢谢!

2 个答案:

答案 0 :(得分:1)

为了回答您的第一个问题,我使用all()函数编写了一个Cypher查询,以确保发布包含声明列表中指定的所有标记。此外,收集所有文章并按降序排序。看看:

with ['tag1', 'tag2'] as tags
match (author:Author)-[:WROTE]->(article:Article)
where all (tag in tags where tag in article.tags)
with author, collect(article) as articles order by size(articles) desc
return author

你的第二个问题很难回答。你对“强大机器”的定义是什么?此外,它取决于除数据集大小之外的其他因素。我认为,您在此数据集上运行的查询以及并发访问的数量是很好的例子。

答案 1 :(得分:0)

我根据@floatingpurr和@Bruno Peres答案创建了以下查询:

MATCH (author:Author)-[:PUBLISHED]->(publication:Publication)
MATCH (publication)-[:TAGGED]->(tag:Tag)
WHERE tag.name IN ['Tag 2', 'Tag 3']
RETURN author, count(*) AS numberOfPublications
ORDER BY numberOfPublications DESC

我对伯爵不满意,因为它并不计算独特的出版物。如果出版物包含标签2和标签3(标准中的标签),那么它将计为2.我希望它像1一样。

在这种情况下,我不知道如何使用不同的功能。另外,我不知道它是否是优化版本。感谢。