如何使用Elasticsearch中的新变量更新索引?

时间:2016-07-01 14:18:20

标签: node.js elasticsearch indexing full-text-search

我有一个索引'user',其映射的字段为“first”,“last”和“email”。具有名称的字段在一个点处被索引,然后具有电子邮件的字段被索引在单独的点处。我希望这些索引具有相同的id,对应于一个user_id参数。所以像这样:

function indexName(client, id, name) {
  return client.update({
    index: 'user',
    type: 'text',
    id: id,
    body: {
      first: name.first
      last: name.last 
    }
  })
}

function indexEmail(client, id, email) { 
  return client.update({
    index: 'user',
    type: 'text',
    id: id,
    body: {
      email: email
    }
  })
}

运行时:

indexName(client, "Jon", "Snow").then(indexEmail(client, "jonsnow@gmail.com"))

我收到一条错误消息,指出该文档尚未创建。如何计算具有可变数量字段的文档?如果索引尚未创建,然后随后更新,我该如何创建索引?

1 个答案:

答案 0 :(得分:1)

您正在使用的功能client.update,更新part of a document。您实际需要的是首先使用client.create function创建文档。 要创建和索引,您需要indices.create function

关于文档类型中可变数量的字段,这不是问题,因为弹性搜索支持dynamic mapping。但是,建议在创建索引时提供映射,并尝试坚持下去。弹性搜索默认映射可以在以后创建问题,例如分析那些难以(或不可能)搜索和匹配的uuids或电子邮件地址。