Beispiel #1
0
        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);
        }
Beispiel #2
0
        public TSearchResponse Search(string searchText, SearchTextFormat format = SearchTextFormat.Structured)
        {
            var tokens = ToTokens(searchText, format);
            var query  = ToSearchQuery(tokens);

            return(Search(query));
        }