我让ElasticSearch运行在一个Docker集群中,我使用它来搜索查询ES的ASP.NET核心API。我想在集群创建时定义ES的索引映射,在我的停靠器中运行一个作业-compose,它使用.NET控制台应用程序将请求放到ES上来定义映射。
我已经看到,使用模板应该为我做这件事,但是我在NEST或ElasticSearch-NET中找不到任何最佳实践的例子,所以我想在这里问一问。
我的想法是简单地定义一个模板,该模板应用于创建的任何新索引。然后,我运行了一个外部作业,当一个新文档需要进入一个新的索引时,它和任何新的索引都将具有相同的映射。我还想定义一个别名,这个别名对所有新索引都是通用的。
我想定义的映射如下:
{
"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" } }
]
}问题:
提前感谢您的帮助
西蒙
发布于 2020-09-21 00:45:44
最后,使用LowLevel Elasticsearch客户端解决了这个问题。我有一个配置文件,其中包含模板的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()));https://stackoverflow.com/questions/63929324
复制相似问题