Angeben und Verwenden eines NGramTokenizer mit dem C # NEST-Client für Elastic Search

Aktualisiert, um ein funktionierendes Beispiel anzuzeigen

Ich versuche, in ElasticSearch eine Teilsuche nach einer Sammlung von Benutzernamen durchzuführen.

Das Herumsuchen hat mich in die Richtung gelenktnGram Tokenizer Richtung, aber ich bin ratlos bei der ordnungsgemäßen Umsetzung und keine Ergebnisse zu erzielen.

Dies ist der relevante Code, der aus dem Projekt entfernt wurde, an dem ich arbeite.

Ich habe verschiedene Kombinationen und Suchtypen ohne Erfolg ausprobiert.

setup.cs

var client = new ElasticClient(settings.ConnectionSettings);

// (Try and) Setup the nGram tokenizer.
var indexSettings = new IndexSettings();
var custonAnalyzer = new CustomAnalyzer();

customAnalyzer.Tokenizer = "mynGram";
customAnalyzer.Filter = new List<string> { "lowercase" };

indexSettings.Analysis.Analyzers.Add("mynGram", customAnalyzer);

indexSettings.Analysis.Tokenizers.Add("mynGram", new NGramTokenizer
                                                    {
                                                        MaxGram = 10,
                                                        MinGram = 2
                                                    });

client.CreateIndex(settings.ConnectionSettings.DefaultIndex, indexSettings);

client.MapFromAttributes<Profile>();

// Create and add a new profile object.
var profile = new Profile
                  {
                      Id = "1",
                      Username = "Russell"
                  };


client.IndexAsync(profile);

// Do search for object
var s = new SearchDescriptor<Profile>().Query(t => t.Term(c => c.Username, "russ"));

var results = client.Search<Profile>(s);

Profile.cs

public class Profile
{
    public string Id { get; set; }

    [ElasticProperty(IndexAnalyzer = "mynGram")]
    public string Username { get; set; }
}

Irgendwelche Tipps wären sehr dankbar.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage