Saya memiliki kelas Model Sarang elasticsearch

public class Data
    {       
        public long Id { get; set; }
       
        public string DeviceCode { get; set; }
    }

Saat mengindeks dokumen ini menggunakan automap , nest akan membuat dua bidang untuk properti DeviceCode - DeviceCode dan DeviceCode.keyword. Saya ingin mengurutkan berdasarkan bidang DeviceCode.keyword dengan penyortiran case-sensitive - Apakah mungkin untuk mencapai ini melalui automap (dengan menerapkan penganalisis atau filter menggunakan pemetaan atribut di kelas model). Saya ingin menyimpan bidang teks dan kata kunci dalam pencarian elastis.

Salam Vineeth

0
vineethpj 9 Mei 2021, 01:23

1 menjawab

Jawaban Terbaik

Anda dapat menerapkan normalizer ke keyword ke nilai huruf kecil pada waktu indeks untuk kueri dan agregasi yang tidak peka huruf besar-kecil

var client = new ElasticClient(settings);
    
var createIndexResponse = client.Indices.Create("my-data", c => c
    .Settings(s => s
        .Analysis(a => a
            .Normalizers(n => n
                .Custom("lowercase", cn => cn
                    .Filters("lowercase")
                )
            )
        )
    )
    .Map<Data>(m => m
        .AutoMap()
        .Properties(p => p
            .Text(t => t
                .Name(n => n.DeviceCode)
                .Fields(f => f
                    .Keyword(k => k
                        .Name("keyword")
                        .IgnoreAbove(256)
                    )
                    .Keyword(k => k
                        .Name("keyword_lowercase")
                        .Normalizer("lowercase")
                        .IgnoreAbove(256)
                    )
                )
            )
        )
    )
);

Kemudian untuk menggunakan keyword_lowercase multi-bidang

var searchResponse = client.Search<Data>(s => s
    .Index("my-data")
    .Sort(so => so
        .Ascending(f => f.DeviceCode.Suffix("keyword_lowercase"))
    )
);
0
Russ Cam 11 Mei 2021, 08:21