From da904b62be1655f18f3bfb763c584874448c8901 Mon Sep 17 00:00:00 2001 From: Lauri Himanen <lauri.himanen@gmail.com> Date: Mon, 22 Jun 2020 09:13:43 +0300 Subject: [PATCH] Fixed bug in encyclopedia result filtering. --- nomad/app/api/encyclopedia.py | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/nomad/app/api/encyclopedia.py b/nomad/app/api/encyclopedia.py index 83606aa099..016c35735f 100644 --- a/nomad/app/api/encyclopedia.py +++ b/nomad/app/api/encyclopedia.py @@ -80,6 +80,17 @@ def get_es_doc_values(es_doc, mapping, keys=None): return result +def get_enc_filter(): + """Returns a shared term filter that will leave out unpublished, embargoed + or invalid entries. + """ + return [ + Q("term", published=True), + Q("term", with_embargo=False), + Q("term", encyclopedia__status="success"), + ] + + material_query = api.parser() material_query.add_argument( "property", @@ -107,11 +118,6 @@ material_result = api.model("material_result", { "structure_prototype": fields.String, "structure_type": fields.String, }) -enc_filter = [ - Q("term", published=True), - Q("term", with_embargo=False), - Q("term", encyclopedia__status="success"), -] @ns.route("/materials/<string:material_id>") @@ -141,7 +147,7 @@ class EncMaterialResource(Resource): s = Search(index=config.elastic.index_name) query = Q( "bool", - filter=enc_filter + [ + filter=get_enc_filter() + [ Q("term", encyclopedia__material__material_id=material_id), ] ) @@ -153,8 +159,6 @@ class EncMaterialResource(Resource): "size": 1, "collapse": {"field": "encyclopedia.material.material_id"}, }) - print("================= M QUERY ==================") - print(s.to_dict()) response = s.execute() # No such material @@ -234,7 +238,7 @@ class EncMaterialsResource(Resource): except Exception as e: abort(400, message=str(e)) - filters = enc_filter + filters = get_enc_filter() must_nots = [] musts = [] @@ -447,7 +451,7 @@ class EncGroupsResource(Resource): # variation hashes set. bool_query = Q( "bool", - filter=enc_filter + [Q("term", encyclopedia__material__material_id=material_id)], + filter=get_enc_filter() + [Q("term", encyclopedia__material__material_id=material_id)], must=[ Q("exists", field="encyclopedia.properties.energies.energy_total"), Q("exists", field="encyclopedia.material.idealized_structure.cell_volume"), @@ -531,7 +535,7 @@ class EncGroupResource(Resource): bool_query = Q( "bool", - filter=enc_filter + [ + filter=get_enc_filter() + [ Q("term", encyclopedia__material__material_id=material_id), Q("term", **{group_id_source: group_id}), ], @@ -614,7 +618,7 @@ class EncSuggestionsResource(Resource): s = Search(index=config.elastic.index_name) query = Q( "bool", - filter=enc_filter + filter=get_enc_filter() ) s = s.query(query) s = s.extra(**{ @@ -687,7 +691,7 @@ class EncCalculationsResource(Resource): s = Search(index=config.elastic.index_name) query = Q( "bool", - filter=enc_filter + [ + filter=get_enc_filter() + [ Q("term", encyclopedia__material__material_id=material_id), ] ) @@ -838,7 +842,7 @@ class EncStatisticsResource(Resource): # Find entries for the given material. bool_query = Q( "bool", - filter=enc_filter + [ + filter=get_enc_filter() + [ Q("term", encyclopedia__material__material_id=material_id), Q("terms", calc_id=data["calculations"]), ] @@ -1034,7 +1038,7 @@ class EncCalculationResource(Resource): s = Search(index=config.elastic.index_name) query = Q( "bool", - filter=enc_filter + [ + filter=get_enc_filter() + [ Q("term", encyclopedia__material__material_id=material_id), Q("term", calc_id=calc_id), ] -- GitLab