为什么Google的CSE会针对相同的查询字符串返回不同的结果?
为了清楚起见,我不是要重现实际Google搜索引擎的结果。我只想从自定义搜索中获得一致的结果。
我正在使用CSE进行练习项目,我正在进行分页。当我两次提交相同的请求时,只更改start
参数的值时,我会得到截然不同的searchInformation.totalResults
值。
当我正常搜索返回数百万条结果的随机词(例如鸡)时,请求之间的差异就是数百万。
当我进行疯狂搜索时,设计只返回相对较少的结果,差异足以显着改变搜索结果的页数。
以下是疯狂搜索的示例:鸡马来西亚比赛-masterchef serama bbc facebook
如果我运行一次,它可能会返回40个结果。如果我转到结果的“下一页”(将start
参数增加10),它可能会说49个结果......或者21个结果......它就到处都是。
为什么会这样?
这是我的代码(节点)的一个子集:
function cseSearch (req) {
let searchType = req.query.searchType
let cseId = process.env['CSE_ID_' + searchType.toUpperCase()]
let start = req.query.page ? (req.query.page * 10) - 10 : 1
if (start < 1) start = 1
let options = {
uri: 'https://www.googleapis.com/customsearch/v1/',
qs: {
q: req.query.query,
cx: cseId,
key: process.env.API_KEY,
num: 10,
safe: 'high',
start: start
},
json: true
}
return rp(options)
.then(results => {
console.log(results.searchInformation)
console.log(results)
let pages = Math.floor(results.searchInformation.totalResults / 10) + 1
let data = {
searchType: req.query.searchType,
searchTime: results.searchInformation.formattedSearchTime,
resultCount: results.searchInformation.formattedTotalResults,
items: results.items,
pages: pages
}
console.log(`pages: ${pages}`)
return data
})
.catch(error => {
console.log(error)
return error
})
}
rp()
是request-promise-native
模块。Thing
架构。你可以在https://github.com/VAggrippino/findIt找到整件事,但它仍然非常粗糙。
答案 0 :(得分:0)
由于Google使用了如此多的服务器/集群,因此每次都不太可能获得一致的结果。因此,您必须每次都指定start参数,就像它是一个新查询一样。