Queries custom_score, has_parent, has_child used with only filters

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Queries custom_score, has_parent, has_child used with only filters

q42jaap
I created an issue about not being able to specify filters on a lot of levels in the query DSL:
https://github.com/elasticsearch/elasticsearch/issues/3165

So for instance this has_parent filter:
{
  "has_parent": {
    "type": "accos",
    "query": {
      "filtered": {
        "filter": {
          "term": {
            "locationCode": "0512"
          }
        }
      }
    }
  }
}

This is very verbose and could (in theory) be specified like this:
{
  "has_parent": {
    "type": "accos",
    "filter": {
      "term": {
        "locationCode": "0512"
      }
    }
  }
}

Being a filter itself, the has_parent filter now takes a query, which seems strange.


For query's has_child, has_parent and custom_score, I also see myself doing this. For example:

{
  "query": {
    "filtered": {
      "query": {
        "has_child": {
          "type": "prices",
          "score_type": "max",
          "query": {
            "custom_score": {
              "script": "-doc['pricePerPerson'].value",
              "query": {
                "filtered": {
                  "filter": {
                    "term": {
                      "careType": "LO"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "filter": {
        "term": {
          "locationCode": "0512"
        }
      }
    }
  }
}

The custom score query doesn't use _score in the script field, and to be able to use caching I want a filter, so I have to use a filtered query.
This could have been written (again, in theory) like this:

{
  "query": {
    "filtered": {
      "query": {
        "has_child": {
          "type": "prices",
          "score_type": "max",
          "query": {
            "custom_score": {
              "script": "-doc['pricePerPerson'].value",
              "filter": {
                "term": {
                  "careType": "LO"
                }
              }
            }
          }
        }
      },
      "filter": {
        "term": {
          "locationCode": "0512"
        }
      }
    }
  }
}

In fact, I think this could be applied to lots of query types that only take a query parameter now.

Are there any (possibly technical) things I'm missing?

Jaap

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
For more options, visit https://groups.google.com/groups/opt_out.