0

I need to make a email field searchable. Let us say I have email in one of the records of the search index - praagarwal@microsoft.com

I should be able to search for this via -

  1. mytestemailid
  2. mytestemailid@domain.com
  3. mytestemailid@domain.com and if possible via mytes, myteste, etc.

Which built-in analyzer I should use, or how to configure a custom analyzer for this requirement?

I tried to achieve this via a edge N gram tokenizer.

  [SearchableField(SearchAnalyzerName = LexicalAnalyzerName.Values.StandardLucene, IndexAnalyzerName = "prefixEdgeAnalyzer")]
        public string? LastUpdatedBy { get; set; }

This is how I created the analyzer

var nedgeTokenfilter = new EdgeNGramTokenFilter("edgeNgramTokenFilterV2");

nedgeTokenfilter.MinGram = 3;
nedgeTokenfilter.MaxGram = 20;
nedgeTokenfilter.Side = EdgeNGramTokenFilterSide.Front;

var prefixEdgeAnalyzer = new CustomAnalyzer("prefixEdgeAnalyzer", LexicalTokenizerName.Whitespace);
prefixEdgeAnalyzer.TokenFilters.Add(TokenFilterName.Lowercase);
prefixEdgeAnalyzer.TokenFilters.Add("edgeNgramTokenFilterV2");

FieldBuilder fieldBuilder = new FieldBuilder();
var searchFields = fieldBuilder.Build(typeof(SearchRequest));

var definition = new SearchIndex(indexName, searchFields);

definition.TokenFilters.Add(nedgeTokenfilter);
definition.Analyzers.Add(prefixEdgeAnalyzer);

var response = await _adminClient.CreateOrUpdateIndexAsync(definition).ConfigureAwait(false);

Search via mytestemailid worked but search via complete email mytestemailid@domain.com did not work.

0 Answers0