I would like to create a query which matches based on a phrase query but also filters based off of multiple fields. I am using PHP API syntax, but its pretty obvious how to translate the syntax. This is my query:
$searchParams = [ 'index' => 'main_search', 'type' => 'my_type', 'explain' => false, 'body' => [ 'from' => $offset, 'size' => $perPage * 2, 'query' => [ 'function_score' => [ 'query' => [ 'bool' => [ 'filter' =>[ 'bool' =>[ 'must' => [ ['terms' => ['price' => $price]], ['terms' => ['media_type' => $mediaType]], ] ] ], 'should' => [ 'multi_match' => [ 'query' => $query, 'type' => 'most_fields', 'fields' => ['author','category','title', 'tag_name_list', 'tag_name_list^3', 'title.stemmed', 'title.shingles', 'title.autocomplete', 'tag_name_list.stemmed^3', 'tag_name_list.shingles^3'], ] ] ] ], 'script_score' => [ 'script' => [ 'lang' => 'painless', 'inline' => " double avgRating = (doc['num_ratings'].value == 0) ? 2 : doc['avg_rating'].value; long numRatings = (doc['num_ratings'].value == null) ? 0 : doc['num_ratings'].value; double rating = ((numRatings * 2.0/(numRatings + 2.0)) * avgRating) + ((2.0/(numRatings + 2.0)) * 2.0); rating * _score" ] ] ], ] ] ];
When I was using one filter (without the bool inside of the filter) it was working. Now it is not. The input $mediaType variable and the $price variable are arrays of values that I want to filter by. Anyone know why I am getting "parsing_exception","reason":"[terms] unknown token [END_ARRAY] trying to do multiple field filter after [media_type] ?