首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ElasticSearch客户端在.NET上定义索引模板

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

Stack Overflow用户
提问于 2020-09-16 23:42:10
回答 1查看 580关注 0票数 0

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

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

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

我想定义的映射如下:

代码语言:javascript
复制
{
    "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"
        }
      }
    }
}

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

代码语言:javascript
复制
{
          "actions" : [
              { "add" : { "index" : "{index}", "alias" : "product" } }
          ]
      }

问题:

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

提前感谢您的帮助

西蒙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-21 00:45:44

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

代码语言:javascript
复制
  "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" : {}
  }
}

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

代码语言:javascript
复制
// Send a PUT request containing the template
var postMapping =
        _client.LowLevel.DoRequest<StringResponse>(HttpMethod.PUT, "_template/product_template", PostData.String(template.ToString()));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63929324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档