Shalom Ohayon
Shalom Ohayon

Reputation: 135

Elasticsearch find documents based on result of a main query

I want to search documents based on the field of the result main query

For ex. Let say that my doc contains only two fields

  1. userId
  2. geopoint

I need a query that return me the document of a specific userId and documents of users that are around his geopoint I didn't find a way to make this in one query and for now I making 2 queries (one to retrieve the doc of a user and one to retrieve users around his geopoint)

Thanks

UPDATE 1

The first query:

GET users\_search
{
"query": {
    "term": {
      "userId": "10250000075114"
    }
  }  
}

Then I make the second query for users around it

GET users\_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must_not": {
            "term": {
              "userId": "10250000075114"
            }
          }
        }
      },
      "functions": [
        {
          "gauss": {
            "rank": {
              "origin": "0.8",
              "offset": "0.05",
              "scale": "0.1"
            }
          }
        },
        {
          "gauss": {
            "startPoint": {
              "origin": "32.547484,34.95457",
              "offset": "5km",
              "scale": "10km"
            }
          }
        },
        {
          "script_score": {
            "script": "_score"
          }
        }
      ]
    }
  }
}

Where the startPoint in the second query is the startPoint result of the first

Upvotes: 0

Views: 319

Answers (1)

Amit
Amit

Reputation: 32386

what you are looking for is the sub-query(which is present in RDBMS) but sub-queries are not present in Elasticsearch.

But you can use the filter on your user-ids and then find the users around only those users, please refer boolean query for more info and examples.

Upvotes: 1

Related Questions