如何使用NEST为Elasticsearch指定索引?

本文关键字:索引 Elasticsearch 何使用 NEST | 更新日期: 2023-09-27 17:54:08

如果我运行下面的代码,它将在所有索引上创建一个映射,这是我不想要的。我找不到指定我想要的索引的文档。
如何指定将此映射应用于哪个索引?

var client = new ElasticClient();
var response = client.Map<Company>(m => m
    .Properties(props => props
        .Number(n => n
            .Name(p => p.ID)
            .Type(NumberType.Integer)
        )
    )
);

如何使用NEST为Elasticsearch指定索引?

添加.Index()到put映射描述符

var response = client.Map<Company>(m => m
    .Index("index-name")
    .Properties(props => props
        .Number(n => n
            .Name(p => p.ID)
            .Type(NumberType.Integer)
        )
    )
);

将映射放入现有索引。如果索引还不存在,您可以在一个请求中创建它并为它定义映射。例如

var createIndexResponse = client.CreateIndex("index-name", c => c
    // settings for the index
    .Settings(s => s
        .NumberOfShards(3)
        .NumberOfReplicas(1)
        .RefreshInterval("5s")
    )
    // mappings for the index
    .Mappings(m => m
        .Map<Company>(mc => mc
            .Properties(props => props
                .Number(n => n
                    .Name(p => p.ID)
                    .Type(NumberType.Integer)
                )
            )
        )
    )
);

也可以这样做。

        string IndexName = "my_index";
        this.client.CreateIndex(IndexName, c =>
            c.AddMapping<CForm>
            (m => m.Properties(ps => ps.Attachment
                                    (a => a.Name(o => o.Document)
                                           .TitleField(t => t.Name(x => x.Name)
                                                            .TermVector(TermVectorOption.WithPositionsOffsets))))));

        // Create Mappings for the fields with specific properties.
        // You can also make field1 a multi-field and make it both analyzed and not_analyzed 
        // to get the best of both worlds (i.e. text matching on the analyzed field + aggregation on the exact value 
        // of the not_analyzed raw sub-field).
        // Field: Plan
        var result = this.client.Map<CForm>(m => m
             .Properties(props => props
                .MultiField(s => s
                    .Name(p => p.Plan)
                    .Fields(pprops => pprops
                                .String(ps => ps.Name(p => p.Plan).Index(FieldIndexOption.NotAnalyzed))
                                .String(ps => ps.Name("original").Index(FieldIndexOption.Analyzed))
                        )
                     )
                 )
             );