您可以在Elasticsearch中自动创建的索引中将字段设置为not_analyzed吗?

时间:2020-07-28 14:54:55

标签: elasticsearch terraform chalice

作为我们AWS基础架构的一部分,我正在使用Elasticsearch(7.4)索引。我们使用Terraform在AWS Elasticsearch中创建域,但没有显式创建索引。而是在发布第一个文档时自动创建索引。效果很好,但是现在我被要求拥有一个非分析字段(用户ID)。

放置第一个文档时是否有方法创建字段not_analyzed

如果没有 ,我将字段设置为not_analyzed有哪些选择?我应该进行某种初始化/引导吗?也许有一种方法可以从Terraform做到。该应用程序是使用Chalice构建的,并在Lambda中运行。不知道在这种情况下如何在Lambda中进行初始化。理想情况下,我会一次触发此呼叫:

PUT /my_index
{
    "mappings" : {
          "properties" : {
              "user_id" : {
                  "type" : "string",
                  "index" : "not_analyzed" 
              }
          }
    }

}

重新启动应用程序时,此调用将再次发送,但我想它是不可变的(PUT)。

2 个答案:

答案 0 :(得分:1)

这可能是一个矫kill过正,但我​​会考虑使用index template feature

这看起来像

Epoch 1/1
250000/250000 [==============================] - 380s 2ms/step - loss: 7.1443
<keras.callbacks.callbacks.History at 0x7fa3ff150048>

它可以使用专用的provider进行地形化-还可以使用IAM密钥直接与AWS Elasticsearch集成。

然后以这种方式创建的第一个文档还将使用给定的模板(当然,如果名称与模式匹配)来建立索引

答案 1 :(得分:0)

这不会直接回答您的问题,但是对于您的问题,我建议在Elasticsearch之外寻求解决方案:

  • 在Terraform中提供第二个Lambda函数,该函数将被允许针对Elasticsearch运行PUT操作,并且其唯一目的是创建索引。
  • 在Terraform中,一旦创建域,就会调用此lambda函数

换句话说,执行问题中提到的引导程序,但是将其移至单独的lambda函数,而不是将其混入应用程序lambda中。