match_query inside script? [elasticsearch]

2019-06-17 07:28发布

问题:

I have a quite complex aggregation, its complexity is caused by absence of has_parent aggregation. Since so it's implemented using groovy. The only problem I have is to filter docs being counted in the aggregation.

Aggregation looks like this: https://gist.github.com/serj-p/c4fcc9810b3b627de294 the aim of this aggregation is to build the top of universities contacts are graduated from. A contact doc has child docs, which are facebook profiles. Last ones have nested fields representing universities, that's why I access _source field.

As you probably can see, I perform filtering in the beginning :

                      {
                        "match_phrase_prefix": {
                          "organizations.name": "stan"
                        }
                      }

to exclude contacts not having relevant docs. "organizations.name" is analyzed as

           {
                "filter": [
                    "lowercase",
                    "standard",
                    "trim",
                    "asciifolding",
                ],
                "type": "custom",
                "tokenizer": "standard"
            }

the text being appleid to filter this field is being analyzed in the same way. I found it very difficult to do the same processing of a field value and a filtering text inside of the script which should filter particular nested docs. That's why I am looking for some possibility to access ES API from the script to do so.

Thanks in advance for any advice