def get_text_query(self): query = [] if self.parser.text: qs = query_string_query(self.TEXT_FIELDS, self.parser.text) query.append(qs) if self.parser.prefix: query.append({ "match_phrase_prefix": { self.PREFIX_FIELD: self.parser.prefix } }) if not len(query): query.append({"match_all": {}}) return query
def get_highlight(self): if not self.parser.highlight: return {} query = query_string_query(self.HIGHLIGHT_FIELD, self.parser.text) return { "encoder": "html", "fields": { self.HIGHLIGHT_FIELD: { "highlight_query": query, "require_field_match": False, "number_of_fragments": self.parser.highlight_count, "fragment_size": self.parser.highlight_length, } }, }
def alert_query(alert, authz): """Construct a search query to find new matching entities and documents for a particular alert. Update handling is done via a timestamp of the latest known result.""" # Many users have bookmarked complex queries, otherwise we'd use a # precise match query. filters = [authz_query(authz)] if alert.notified_at is not None: notified_at = alert.notified_at.isoformat() filters.append({"range": {"updated_at": {"gt": notified_at}}}) return { "size": 50, "_source": { "includes": ["collection_id"] }, "query": { "bool": { "should": [query_string_query("text", alert.query)], "filter": filters, "minimum_should_match": 1, } }, }