def construct_query(index, net, channel, src, num, size): # Get the initial query extra_must = [] if num: extra_must.append({"match": {"num": num}}) if net: extra_must.append({"match": {"net": net}}) if channel: extra_must.append({"match": {"channel": channel}}) types = ["msg", "notice", "action", "kick", "topic", "mode"] fields = [ "nick", "ident", "host", "channel", "ts", "msg", "type", "net", "src", ] if index == "int": fields.append("mtype") query_should = [{"match": {"mtype": x}} for x in types] else: query_should = [{"match": {"type": x}} for x in types] query = { "size": size, "query": { "bool": { "must": [ {"match": {"src": src}}, { "bool": { "should": query_should, } }, *extra_must, ] } }, "fields": fields, "_source": False, } print("QUERY", query) return query