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; }
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); }
// 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); }
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; }