索引新文档并在同一查询中获取索引文档

时间:2020-04-10 13:22:25

标签: node.js elasticsearch elasticsearch-query

是否可以为新文档建立索引并在他成功建立索引后将其归还?

我尝试使用返回的_id,但是我使用了2个查询,而index操作需要一些时间,第二个查询找不到_id,因此它并不总是完美地完成。

这是为文档建立索引的查询:

const query = await elsaticClient.index({
routing: "dasdsad34_d",
index: "milan",
body: {
  text: "san siro",
  user: {
    user_id: "3",
    username: "maldini",
  },
  tags: ["Forza Milan","grande milan"],
  publish_date: new Date(),
  likes: [],
  users_tags: [1,5],
  type: {
    name: "comment",
    parent: "dasdsad34_d",
  },
},

});

1 个答案:

答案 0 :(得分:0)

否,默认行为无法实现。默认情况下,Elasticsearch仅提供近乎实时的支持。由于索引刷新被认为是一项昂贵的操作,因此其默认刷新间隔为1秒。

为了解决这个问题,可以在索引操作中添加 refresh = true 。您可以从下面的链接中获取更多详细信息。

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html

请注意,这是不推荐的选项,因为这会带来巨大的开销。仅当您要插入的相关索引的数量非常少时,才使用此功能。

推荐的方法是在索引操作中使用 refresh = wait_for 。但这有一个缺点,那就是等待一秒钟自然刷新完成。因此,如果您将默认刷新间隔设置为1,并且可以接受,这是可以接受的折衷方案,那么这就是方法。

但是,如果设置了较高的刷新间隔,则索引操作的等待时间将与刷新间隔一样长。因此,请仔细选择您的选项。