当前位置: 首页 > 面试题库 >

用Elasticsearch搜索/滚动异步等待

终育
2023-03-14
问题内容

我正在将其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)
}

问题答案:

所以,我已经重新编写了它,以便在这里帮助任何需要它的人。

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')


 类似资料:
  • 主要内容:多索引此API用于在Elasticsearch中搜索内容。 用户可以通过发送具有查询字符串的获取请求作为参数或在请求的消息正文中的查询来进行搜索。所有的搜索API都是多索引,多类型。 多索引 Elasticsearch允许我们搜索存在于所有索引或一些特定索引中的文档。 例如,如果我们需要搜索名称包含的所有文档。 响应 或者,同样地我们可以在,索引中搜索 - 多类型 还可以在所有类型或某种指定类型的索引中

  • 问题内容: 我对Elasticsearch的滚动功能感到有些困惑。在Elasticsearch中,是否每当用户滚动结果集时都可以调用搜索API?从文档 这是否意味着它将每30秒执行一次搜索并返回所有结果集,直到没有记录为止? 例如,我的ES总共返回500条记录。我从ES获得的数据是两组分别有250条记录的记录。有什么办法可以让我先显示第一组250条记录,当用户滚动时再显示第二组250条记录。 问题

  • 我已经建立了一个不和谐,但是使用javascript,我有一个命令,我希望能够搜索youtube视频,并在语音频道中播放第一个结果。 我正在使用discordjs和discord-youtup-api库。 此代码查找要搜索的命令。args数组是搜索查询 这就是使用youtube api搜索视频并返回其网址的功能。 尝试该命令时,我确实收到以下错误消息。 我猜问题在于,音乐机器人试图在searchY

  • 我试图在react/electron项目中使用async/await,但它不起作用。我想要的是获取docker容器状态列表。但是安慰。日志(列表)返回未定义的。 有人能帮我吗?:)

  • 问题内容: 我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如: 如果soruce中有一个字符串,例如:“ ”,而当我的文本字符串如下:“ ”,“ ”,“ ” …时,它就起作用了。 但是,当我的realTimeTextIn字符串为“ ”时,全文搜索将不起作用。我搜索的单词不能超过一个。 我在

  • 问题内容: 我们有两个节点的集群(私有云中的VM,64GB的RAM,每个节点8个核心CPU,CentOS),几个小索引(约100万个文档)和一个大索引,约有2.2亿个文档(2个分片,170GB)的空间)。每个盒上分配了24GB的内存用于elasticsearch。 文件结构: 运行以下查询大约需要1-2秒: 我们是在此时达到硬件极限,还是有办法优化查询或数据结构以提高性能? 提前致谢! 问题答案: