Google CSE使用相同的查询返回不同的结果?

时间:2018-04-10 08:42:02

标签: node.js google-custom-search

为什么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
    })
}

你可以在https://github.com/VAggrippino/findIt找到整件事,但它仍然非常粗糙。

1 个答案:

答案 0 :(得分:0)

由于Google使用了如此多的服务器/集群,因此每次都不太可能获得一致的结果。因此,您必须每次都指定start参数,就像它是一个新查询一样。