protected List <SearchToken> ToTokens(string searchText, SearchTextFormat format) { var _searchTokenizerService = new SearchTokenizerService <TSearchHeadEnum>(); _searchTokenizerService.OnSearchTokenKeyValuePair = OnSearchTokenKeyValuePair; if (searchText == null) { searchText = string.Empty; } // Allow searches for domain\fatuser searchText = searchText.Replace(@"\", @"\\"); // strip special characters that would be interpreted in neo regex if (format == SearchTextFormat.Unstructured && !string.IsNullOrEmpty(searchText)) { var allowedPattern = "[^-a-zA-Z0-9,_'|:!\" .\\\\]+"; searchText = Regex.Replace(searchText, allowedPattern, "", RegexOptions.Compiled); } List <SearchToken> tokens; try { tokens = _searchTokenizerService.ToTokens(searchText); } catch (Exception e) { var message = $"Failed to convert '{searchText}' to tokens: " + e.Message; throw ArtemisException.Create(message, e); } // Add the wild cards for the user if (format == SearchTextFormat.Unstructured) { foreach (var token in tokens) { var tokenAsString = token as SearchStringToken; //Don't turn empty into wildcard - too many hits are useless //if (token.Value == "*") //{ // token.Value = ""; //} if (tokenAsString != null) { tokenAsString.Value = $"*{tokenAsString.Value}*"; } var tokenAsNumber = token as SearchNumberToken; if (tokenAsNumber != null) { tokenAsNumber.Value = $"*{tokenAsNumber.Value}*"; } } } return(tokens); }
public TSearchResponse Search(string searchText, SearchTextFormat format = SearchTextFormat.Structured) { var tokens = ToTokens(searchText, format); var query = ToSearchQuery(tokens); return(Search(query)); }