【发布时间】:2018-04-10 08:42:02
【问题描述】:
为什么 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模块。 - 我的 CSE 项目设置时未指定任何域并使用
Thing架构。
你可以在 https://github.com/VAggrippino/findIt 找到整个东西,但它仍然很粗糙。
【问题讨论】:
标签: node.js google-custom-search