public bool ParseTermOrPhrase(NuGetSearchTerm result)
 {
     Debug.Assert(_tokenizer.Peek() == TokenType.Term || _tokenizer.Peek() == TokenType.Phrase);
     result.TermOrPhrase = _tokenizer.Term() ?? _tokenizer.Phrase();
     _tokenizer.Pop();
     return true;
 }
        // Returns list of 2-element arrays, element 0 is field name (or null), element 1 is term/phrase
        public List<NuGetSearchTerm> Parse(string searchTerm)
        {
            var terms = new List<NuGetSearchTerm>();
            _tokenizer = new Tokenizer(searchTerm);
            while (_tokenizer.Peek() != TokenType.Eof)
            {
                var term = new NuGetSearchTerm();
                if (_tokenizer.Peek() == TokenType.Field)
                {
                    if (ParseField(term))
                    {
                        terms.Add(term);
                    }
                }
                else
                {
                    if (ParseTermOrPhrase(term))
                    {
                        terms.Add(term);
                    }
                }
            }

            return terms;
        }
Example #3
0
 public bool ParseTermOrPhrase(NuGetSearchTerm result)
 {
     Debug.Assert(_tokenizer.Peek() == TokenType.Term || _tokenizer.Peek() == TokenType.Phrase);
     result.TermOrPhrase = _tokenizer.Term() ?? _tokenizer.Phrase();
     _tokenizer.Pop();
     return(true);
 }
Example #4
0
        // Returns list of 2-element arrays, element 0 is field name (or null), element 1 is term/phrase
        public List <NuGetSearchTerm> Parse(string searchTerm)
        {
            var terms = new List <NuGetSearchTerm>();

            _tokenizer = new Tokenizer(searchTerm);
            while (_tokenizer.Peek() != TokenType.Eof)
            {
                var term = new NuGetSearchTerm();
                if (_tokenizer.Peek() == TokenType.Field)
                {
                    if (ParseField(term))
                    {
                        terms.Add(term);
                    }
                }
                else
                {
                    if (ParseTermOrPhrase(term))
                    {
                        terms.Add(term);
                    }
                }
            }

            return(terms);
        }
Example #5
0
        // Helper function
        // 1) fix cases of field names: ID -> Id
        // 2) null out field names that we don't understand (so we will search them as non-field-specific terms)
        // 3) For ID search, split search terms such as Id:"Foo.Bar" and "Foo-Bar" into a phrase "Foo Bar" which will work better for analyzed field search
        private static NuGetSearchTerm StandardizeSearchTerms(NuGetSearchTerm input)
        {
            var fieldName = FieldAliases
                            .FirstOrDefault(f => f.Equals(input.Field, StringComparison.OrdinalIgnoreCase));

            if (string.Equals(fieldName, "Author", StringComparison.OrdinalIgnoreCase))
            {
                fieldName = "Authors";
            }
            else if (string.Equals(fieldName, "Owner", StringComparison.OrdinalIgnoreCase))
            {
                fieldName = "Owners";
            }
            else if (string.Equals(fieldName, "Tag", StringComparison.OrdinalIgnoreCase))
            {
                fieldName = "Tags";
            }

            var searchTerm = new NuGetSearchTerm {
                Field = fieldName, TermOrPhrase = input.TermOrPhrase
            };

            if (fieldName == "Id")
            {
                searchTerm.TermOrPhrase = PackageIndexEntity.SplitId(searchTerm.TermOrPhrase);
            }

            return(searchTerm);
        }
Example #6
0
        public bool ParseField(NuGetSearchTerm result)
        {
            // ignore extra leading fields - just accept the last one
            do
            {
                result.Field = _tokenizer.Field();
                _tokenizer.Pop();
            }while (_tokenizer.Peek() == TokenType.Field);

            // Eof, Term, or Phrase....
            if (_tokenizer.Peek() != TokenType.Eof)
            {
                return(ParseTermOrPhrase(result));
            }

            return(false);
        }
        public bool ParseField(NuGetSearchTerm result)
        {
            // ignore extra leading fields - just accept the last one
            do
            {
                result.Field = _tokenizer.Field();
                _tokenizer.Pop();
            }
            while (_tokenizer.Peek() == TokenType.Field);

            // Eof, Term, or Phrase....
            if (_tokenizer.Peek() != TokenType.Eof)
            {
                return ParseTermOrPhrase(result);
            }

            return false;
        }
        // Helper function 
        // 1) fix cases of field names: ID -> Id
        // 2) null out field names that we don't understand (so we will search them as non-field-specific terms)
        // 3) For ID search, split search terms such as Id:"Foo.Bar" and "Foo-Bar" into a phrase "Foo Bar" which will work better for analyzed field search
        private static NuGetSearchTerm StandardizeSearchTerms(NuGetSearchTerm input)
        {
            var fieldName = FieldAliases
                .FirstOrDefault(f => f.Equals(input.Field, StringComparison.OrdinalIgnoreCase));

            if (string.Equals(fieldName, "Author", StringComparison.OrdinalIgnoreCase))
            {
                fieldName = "Authors";
            }
            else if (string.Equals(fieldName, "Owner", StringComparison.OrdinalIgnoreCase))
            {
                fieldName = "Owners";
            }
            else if (string.Equals(fieldName, "Tag", StringComparison.OrdinalIgnoreCase))
            {
                fieldName = "Tags";
            }

            var searchTerm = new NuGetSearchTerm { Field = fieldName, TermOrPhrase = input.TermOrPhrase };

            if (fieldName == "Id")
            {
                searchTerm.TermOrPhrase = PackageIndexEntity.SplitId(searchTerm.TermOrPhrase);
            }

            return searchTerm;
        }