Domanda

I currently have parents indexed in elastic search (documents) and child (comments) related to these documents. My first objective was to search for a document with more than N comments, based on a child query. Here is how I did it:

documents/document/_search
{
    "min_score": 0,
    "query": {
       "has_child" : {
            "type" : "comment",
            "score_type" : "sum",
            "boost": 1,
            "query" : {
               "range": {
                    "date": {
                        "lte": 20130204,
                        "gte": 20130201,
                        "boost": 1
                    }
                }
            }
        }
    }
}

I used score to calculate the amount of comments a document has and then I filtered the documents by this amount, using "min_score". Now, my objective is to search not just comments, but several other child documents related to the document, always based on frequency. Something like the query bellow:

documents/document/_search
{
    "query": {
        "match_all": {
        }
    },
    "filter" : {
        "and" : [{
            "query": {
                "has_child" : {
                    "type" : "comment",
                    "query" : {
                      "range": {
                        "date": {
                            "lte": 20130204,
                            "gte": 20130201
                        }
                      }
                    }
                }   
            }   
        },
        {
        "or" : [
            {"query": {
                "has_child" : {
                    "type" : "comment",
                        "query" : {
                          "match": {
                            "text": "Finally"
                        }
                    }
                }
                }
            },
            { "query": {
                "has_child" : {
                    "type" : "comment",
                        "query" : {
                          "match": {
                            "text": "several"
                        }
                    }
                }
                }  
            }
        ]
        }
    ]
    }
}

The query above works fine, but it doesn't filter based on frequency as the first one does. As filters are computed before scores are calculated, I cannot use min_score to filter each child query.

Any solutions to this problem?

È stato utile?

Soluzione

There is no score at all associated with filters. I'd suggest to move the whole logic to the query part and use a bool query to combine the different queries together.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top