У меня есть ElasticSearch, работающий в кластере Docker, я использую его для поиска через основной API ASP.NET, который запрашивает ES. Я хотел бы определить сопоставления индексов для 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" } }
]
}
Вопросы:
- Является ли использование шаблона правильным способом сделать это?
- Как мне упаковать его вместе в шаблон?
- Как убедиться, что все новые индексы имеют эти настройки и что они не применяются, как метрики или другие индексы по умолчанию, созданные ES?
- Охватывают ли шаблоны настройки того, как вернуть _source после поиска? Например. если я хочу постоянно исключать поле, которое добавляется для функции автозаполнения, но которое я не хочу возвращать при обычных запросах?
Заранее спасибо за помощь
Саймон