我在docker集群中运行了elasticsearch,我使用它来搜索asp.net核心api,该api查询es。我想在集群创建时为es定义索引Map,在docker compose中运行一个作业,该作业使用.net控制台应用程序将请求放在es上以定义Map。
我知道使用模板应该可以帮我完成这项工作,但是我在nest或elasticsearch net中找不到任何最佳实践的例子,所以我想在这里问一下。
我的想法是简单地定义一个模板,应用于任何创建的新索引。然后,我运行一个外部作业,该作业将在新文档需要放入新索引时对任何新索引应用相同的Map。我还想定义一个对所有新索引通用的别名。
我要定义的Map如下:
{
"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" } }
]
}
问题:
使用模板是正确的方法吗?
如何将其打包成模板?
如何确保所有新索引都具有这些设置,并且它不适用于由es创建的度量或其他默认索引?
模板是否也包含搜索后如何返回\u源的首选项?e、 g.如果我想一致地排除为autosuggest特性添加的字段,但我不想在正常查询中返回该字段?
提前谢谢你的帮助
西蒙
1条答案
按热度按时间pvabu6sv1#
最后利用底层elasticsearch网络客户端解决了这一问题。我有一个配置文件,其中包含模板的json请求:
我发送了模板Map的请求: