elasticsearch 创建索引 后 修改 索引的属性类型
首先 创建 索引 并且 添加 数据
PUT user
{
"mappings": {
"properties": {
"age":{
"type": "text"
}
}
}
}
POST user/_doc
{
"age":"22"
}
GET user/_search
{
"query": {
"match_all": {
}
}
}
创建 了 一个user 索引 包含 age 属性 类型 为 text 然后添加了 一个 age ="22" 的 索引数据

再创建一个 临时索引
PUT usertemplate
{
"mappings": {
"properties": {
"age":{
"type": "integer"
}
}
}
}
创建 一个 usertemplate 临时索引 包含属性 age 类型 为 integer
然后 开始 将 user 索引的数据拷贝到 usertemplate 索引 中 注意 这是 text integer 的类型 转换
POST _reindex
{
"source": {
"index": "user"
},
"dest": {
"index": "usertemplate"
},
"script": {
"source": "ctx._source.age =Integer.parseInt( ctx._source.age)",
"lang": "painless"
}
}
注意 这段代码 是 转换 text integer

测试 如果 不加 那段 转换类型的 代码 结果是什么呢
POST _reindex
{
"source": {
"index": "user"
},
"dest": {
"index": "usertemplate"
}
}
如果 执行 上面代码 再查询 usertemplate 结果是什么
GET usertemplate/_search
{
"query": {
"match_all": {
}
}
}

测试结果 是转换代码 可行的
那么 原来的 索引可以删掉 重新建立 然后 反向 拷贝 数据 那么 user 索引 就修改完成了
DELETE user PUT user { "mappings": { "properties": { "age":{ "type": "integer" } } } } POST _reindex { "source": { "index": "usertemplate" }, "dest": { "index": "user" } } GET user/_search { "query": { "match_all": { } } }
最后 测试结果

c# 代码测试一手
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Nest;
namespace ElasticsearchWebAPI.Controllers
{
public class User
{
// public string Name { get; set; }
public int Age { get; set; }
}
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
private readonly ILogger<TestController> logger;
public TestController(ILogger<TestController> logger)
{
this.logger = logger;
}
[HttpGet]
public ActionResult Get()
{
//通常,您可能需要将其他配置选项传递给客户端,例如 Elasticsearch 的地址(如果它正在运行)。 远程计算机。这就是进来的地方; 可以实例化实例以向客户端提供不同的 配置。ConnectionSettings
var settings = new ConnectionSettings(new Uri("http://192.168.0.168:9200")).DefaultIndex("user");
var client = new ElasticClient(settings);
var userDoc = client.Search<User>(user =>
{
return user.Query(q => q
.Match(m => m
.Field(f => f.Age)
.Query("22")
)
);
}).Documents.ToList();
return Ok(userDoc);
}
}
}
结果 可以

浙公网安备 33010602011771号