Phrase_query for multiple should and must

I've indexed my documents as follows:

doc = {
    "_index": index_name,
    "_source": {
        "field": "bm25",
        "passage": passage,
        "passage_id": pid,
        "level1": level1,
        "level2": level2,
        "level3": level3,
        "level4": level4
    },
    "_op_type": "index"
}

With the ES index, I'm trying to retrieve relevant documents using a passage as a query (linking a passage to relevant passages). However, on top of the input query passage being closely matched with the passage field from the indexed documents, I'd like to consider level1~4 fields as well.

Given the query_passage, query_level1, query_level2, query_level3, and query_level4, I want to retrieve documents that share similar passages but also share the same level1~4.

I've wrote phrase_query as below, but it's giving me opensearchpy.exceptions.RequestError: RequestError(400, 'parsing_exception', 'unknown query [query]') error message.

phrase_query = {
    "query": {
        "bool": {
            "should": [
                {"multi_match":
                     {"query": query_passage,
                      "fields": ["passage"]
                      }
                 }
            ],
            "must": [
                {
                    "match": {
                        "level1": {
                            "query": query_level1
                        }
                    }
                },
                {
                    "match": {
                        "level2": {
                            "query": query_level2
                        }
                    }
                },
                {
                    "match": {
                        "level3": {
                            "query": query_level3
                        }
                    }
                },
                {
                    "match": {
                        "level4": {
                            "query": query_level4
                        }
                    }
                }
            ]
        }
    }
}

I want query levels to exactly match levels and auery_passage to be the ingredient where BM25 score is calculated w.r.t the passage field. Any help would be appreciated!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.