Skip to content

Commit

Permalink
visitor: enable wildcard queries with slash
Browse files Browse the repository at this point in the history
* INSPIR-3452
* The reason for switching from query string query to wildcard query is that in the latter the only special charcaters are \* and \?, so slash
wouldn't cause syntax error
  • Loading branch information
MJedr committed May 8, 2020
1 parent a818dd7 commit 1b3dfda
Show file tree
Hide file tree
Showing 2 changed files with 222 additions and 125 deletions.
22 changes: 13 additions & 9 deletions inspire_query_parser/visitors/elastic_search_visitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,14 @@ def _generate_query_string_query(self, value, fieldnames, analyze_wildcard):

return query

def _generate_wildcard_query(self, value, fieldnames):
if not fieldnames:
fieldnames = ['_all']
if not isinstance(fieldnames, list):
fieldnames = [fieldnames]
should_query = [{"wildcard": {field: {"value": value}}} for field in fieldnames]
return wrap_queries_in_bool_clauses_if_more_than_one(should_query, use_must_clause=False)

# TODO Move it to visitor utils and write tests for it.
def _generate_term_query(self, fieldname, value, boost=None):
if not boost:
Expand Down Expand Up @@ -753,17 +761,15 @@ def handle_value_wildcard(self, node, fieldnames=None):
bai_field_variation=FieldVariations.search,
query_bai_field_if_dots_in_name=True
)
query = self._generate_query_string_query(
query = self._generate_wildcard_query(
node.value,
fieldnames=bai_fieldnames or fieldnames,
analyze_wildcard=True
fieldnames=bai_fieldnames or fieldnames
)
return self._generate_nested_author_query(query, fieldnames)

query = self._generate_query_string_query(
query = self._generate_wildcard_query(
node.value,
fieldnames=fieldnames,
analyze_wildcard=True
fieldnames=fieldnames
)
return query

Expand Down Expand Up @@ -932,9 +938,7 @@ def visit_partial_match_value(self, node, fieldnames=None):
query_bai_field_if_dots_in_name=True
)

query = self._generate_query_string_query(value,
fieldnames=bai_fieldnames or fieldnames,
analyze_wildcard=True)
query = self._generate_wildcard_query(value, fieldnames=bai_fieldnames or fieldnames)
if self._are_fieldnames_author_or_first_author(bai_fieldnames) or self._are_fieldnames_author_or_first_author(fieldnames):
return self._generate_nested_author_query(query, fieldnames)

Expand Down
Loading

0 comments on commit 1b3dfda

Please sign in to comment.