【问题标题】:async await with elasticsearch search/scroll使用 elasticsearch 搜索/滚动异步等待
【发布时间】:2018-03-13 17:42:28
【问题描述】:

我使用await 作为我的搜索的一部分,但作为它的+30000 项,我必须使用scroll。

问题是搜索的初始部分在scroll 之前完成,所以await 触发并且功能继续。我应该怎么做才能阻止这种情况?

var allTitles = [];
try {
    await client.search({
        index: 'myindex',
        scroll: '30s',
        source: ['title'], 
        q: 'title:test'
    }, function getMoreUntilDone(error, response) { 
        response.hits.hits.forEach(function (hit) {
            allTitles.push(hit._source.title);
    });
    if (response.hits.total > allTitles.length) {
        client.scroll({
            scrollId: response._scroll_id,
            scroll: '30s'
        }, getMoreUntilDone);
    } else {
        console.log('every "test" title', allTitles);
       }
    });
} catch (err) {
    console.log(err)
}

【问题讨论】:

    标签: elasticsearch async-await


    【解决方案1】:

    所以,我已经重写了它,所以这里是为了帮助任何想要它的人。

    var stuff = []
    const q = {params}
    
    const searchstuff = (q) => {
        return new Promise((resolve, reject) => {
            const get = x => {
                stuff = stuff.concat(x.hits.hits)
                if (x.hits.total > stuff.length) {
                    this.client.scroll({ scrollId: x._scrollId, scroll: '10s'}).then(get)
                } else {
                    resolve(stuff)
                }
            }
            this.client.search(q).then(get).catch(reject)        
        })
    }
    
    const search = await searchstuff(q)
    if (search) console.log('Searched')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2016-07-07
      • 2016-03-25
      • 2017-10-09
      相关资源
      最近更新 更多