我使用CouchDB存储已抓取的网站。例如:
{
"_id": "doc-http:80-example.com/2012/09/",
"_rev": "2-532ce885cdb56261cb6d21903cd74c56",
"contentType": "text/html; charset=UTF-8",
"lastModified": "2013-11-22T17:41:33.471Z",
"schema": "document",
"hostname": "example.com",
"uri": "/2012/09/",
"port": 80,
"protocol": "http:",
"source": [
"http://example.com/page/1",
"http://example.com/page/2",
],
"_attachments": {
"content": {
}
}
}
“source
”元素是一个存储链接到该特定页面的所有页面的数组。数组可以非常快速地增长,并且我不希望每次只想添加一个链接时获取并输出整个文档。
是否可以更新文档并插入另一个链接到源代码而无需重新发送整个“source
”?
答案 0 :(得分:3)
您检查过update handlers
吗? http://wiki.apache.org/couchdb/Document_Update_Handlers
我自己没有这样做,但我读到你应该可以用它来修补文件。
答案 1 :(得分:1)
另一个选项是每个源和目标URL使用一个文档,而不是每个目标URL使用一个文档,其中包含一长串源。
{
...
"sourceUrl": "https://example.com/page/1",
"targetUrl": "https://target.com/page"
}
然后,您将使用视图获取指向给定目标URL的所有源URL的列表:
function(doc) {
emit(doc.targetUrl, doc.sourceUrl);
}
您可以使用_count
缩减来快速检索目标网页的入站链接计数,预先计算此数据以便在您的用户界面中显示。
此外,emit(doc.sourceUrl, doc.targetUrl);
会为您提供一个易于查询来自给定来源的链接的视图。