使用.NET客户端在ElasticSearch上定义索引模板



我在Docker集群中运行了ElasticSearch,我使用它来搜索查询ES的ASP.NET核心API。我想在集群创建时为ES定义索引映射,在我的docker compose中运行一个作业,该作业使用.NET控制台应用程序将请求放在ES上以定义映射。

我已经看到使用模板应该为我做这项工作,但我在NEST或ElasticSearch NET中找不到任何最佳实践的例子,所以我想在这里问一下。

我的想法是简单地定义一个模板,该模板应用于创建的任何新索引。然后,我运行一个外部作业,该作业为ES种子,每当新文档需要进入新索引时,任何新索引都将应用相同的映射。我还想定义一个对所有新索引都通用的别名。

我想定义的映射如下:

{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
},
"mappings": {
"dynamic": false,
"properties": {
"Name": {
"type": "keyword"
},
"Cusip": {
"type": "keyword"
},
"ISIN": {
"type": "keyword"
},
"Ticker": {
"type": "keyword"
},
"suggest": {
"type": "completion",
"analyzer": "autocomplete",
"search_analyzer": "standard"
}
}
}
}

对于别名,我需要使用这样的东西:

{
"actions" : [
{ "add" : { "index" : "{index}", "alias" : "product" } }
]
}

问题:

  1. 使用模板是正确的方法吗
  2. 如何将其打包到模板中
  3. 我如何确保所有新索引都有这些设置,并且它不适用于ES创建的度量或其他默认索引
  4. 模板是否还包括如何在搜索后返回_source的首选项?例如,如果我想始终排除为自动建议功能添加的字段,但不希望在正常查询中返回该字段

提前感谢的帮助

Simon

最终使用LowLevel Elasticsearch net客户端解决了这个问题。我有一个配置文件,其中包含对模板的JSON请求:

"index_patterns": [
"*"
],
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
},
"mappings": {
"dynamic": false,
"properties": {
"Name": {
"type": "keyword"
},
"field1": {
"type": "keyword"
},
"field2": {
"type": "keyword"
},
"field3": {
"type": "keyword"
},
"suggest": {
"type": "completion",
"analyzer": "autocomplete",
"search_analyzer": "standard"
}
}
},
"aliases" : {
"product" : {}
}
}

我发送的模板映射请求如下:

// Send a PUT request containing the template
var postMapping =
_client.LowLevel.DoRequest<StringResponse>(HttpMethod.PUT, "_template/product_template", PostData.String(template.ToString()));

最新更新