예제 #1
0
 def parse(self, query_text: str) -> SearchQuery:
     query = SearchQuery()
     for chunk in re.split(r"\s+", (query_text or "").lower()):
         if not chunk:
             continue
         negated = False
         if chunk[0] == "-":
             chunk = chunk[1:]
             negated = True
         if not chunk:
             raise errors.SearchError("Empty negated token.")
         match = re.match(r"^(.*?)(?<!\\):(.*)$", chunk)
         if match:
             key, value = list(match.groups())
             key = util.unescape(key)
             if key == "sort":
                 query.sort_tokens.append(_parse_sort(value, negated))
             elif key == "special":
                 query.special_tokens.append(_parse_special(value, negated))
             else:
                 query.named_tokens.append(_parse_named(
                     key, value, negated))
         else:
             query.anonymous_tokens.append(_parse_anonymous(chunk, negated))
     return query
예제 #2
0
 def parse(self, query_text: str) -> SearchQuery:
     query = SearchQuery()
     for chunk in re.split(r'\s+', (query_text or '').lower()):
         if not chunk:
             continue
         negated = False
         if chunk[0] == '-':
             chunk = chunk[1:]
             negated = True
         if not chunk:
             raise errors.SearchError('비어있는 부정 토큰.')
         match = re.match(r'^(.*?)(?<!\\):(.*)$', chunk)
         if match:
             key, value = list(match.groups())
             key = util.unescape(key)
             if key == 'sort':
                 query.sort_tokens.append(_parse_sort(value, negated))
             elif key == 'special':
                 query.special_tokens.append(_parse_special(value, negated))
             else:
                 query.named_tokens.append(_parse_named(
                     key, value, negated))
         else:
             query.anonymous_tokens.append(_parse_anonymous(chunk, negated))
     return query
예제 #3
0
 def parse(self, query_text: str) -> SearchQuery:
     query = SearchQuery()
     for chunk in re.split(r'\s+', (query_text or '').lower()):
         if not chunk:
             continue
         negated = False
         while chunk[0] == '-':
             chunk = chunk[1:]
             negated = not negated
         match = re.match('([a-z_-]+):(.*)', chunk)
         if match:
             key, value = list(match.groups())
             if key == 'sort':
                 query.sort_tokens.append(_parse_sort(value, negated))
             elif key == 'special':
                 query.special_tokens.append(_parse_special(value, negated))
             else:
                 query.named_tokens.append(_parse_named(
                     key, value, negated))
         else:
             query.anonymous_tokens.append(_parse_anonymous(chunk, negated))
     return query