Analyzer to enable search over email fields

57 Views Asked by At

I need to make a email field searchable. Let us say I have email in one of the records of the search index - [email protected]

I should be able to search for this via -

  1. mytestemailid
  2. [email protected]
  3. [email protected] 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 [email protected] did not work.

0

There are 0 best solutions below