Run a subquery for each of the filtered documents

I have an index named employees with the following structure:

{
id: integer,
name: text,
age: integer,
cityId: integer,
resumeText: text           <--------- parsed resume text
}

I want to search employees with certain criteria e.g having age > 40, resumeText contains a specific skill or employee belongs to a certain city etc, and have the following query for so far requirement:

{
query:{
bool:{
should:[
{
term:{
cityId:2990
},
{
match:{
resumeText:"marketing"
},
{
match:{
resumeText:"critical thinking"
}}}
],
filter:{
range:{
age:{
gte:40
}}}}}
}

This gives me expected results but i want to know also among the returned documents/employees which are the ones whose resumeText contains the mentioned skills. e.g in the response, I want to get documents having mentioned that this document had matched "critical thinking" , this employee had matched both the skills and this employee didn't match any skills (as it was returned based on other filters)

What changes do i need to do to get the desired results:

  • can aggregation help?
  • can we rum a script for EACH filtered document to compute desired result (sub query for each document)?
  • any other approach?

@kamboh
Have you looked at named queries? https://www.elastic.co/guide/en/elasticsearch/reference/7.8/search-request-body.html#request-body-search-queries-and-filters

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