Especificando e usando um NGramTokenizer com o cliente C # NEST para pesquisa elástica
Atualizado para mostrar uma amostra de trabalho
Eu estou tentando fazer uma pesquisa parcial em uma coleção de nomes de usuários no ElasticSearch.
Pesquisando por aí me apontou nonGram Tokenizer
direção, mas estou perplexo com a implementação adequada e não conseguir obter nenhum resultado.
Este é o código relevante retirado do projeto em que estou trabalhando.
Eu tentei diferentes combinações e tipos de pesquisa sem sucesso.
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; }
}
Qualquer dica seria muito apreciada.