ElasticSearch php sdk simple query not working

this is my first question here, I am having a problem with a simple elasticsearch query made throught the php sdk, json example:

{
"_id": "event:5569fbbdddc85",
"_type": "event",
"videos": {},
"status": "published",
"owner": {
  "firstname": "Patricio",
  "lastname": "",
  "profilepicture": "http://pbs.twimg.com/profile_images/581193413426544640/Q5aqMmPk_normal.jpg",
  "_id": "twitter:2383339241",
  "_type": "user",
  "updated": 1433008088365,
  "created": 1428439794713
  },
"max_age": "18",
"min_age": "18",
"max_invites": "5",
"min_invites": "2",
"updated": 1433009134942,
"created": 1433009134942
}

What I need to do is a filter by owner._id and I am doing this:

    $params['index'] = 'default';
    $params['type'] = 'event';
    $params['size'] = $limit;
    $params['from'] = $from;

    $params['body']['query']['match']['owner._id'] = $userId;

//  elasticsearch search query
    $res = \Es::search($params);

the result is no filter. All the events in database are comming back.

I am following exactly the docs, but with no results, obviously I am missing something

Thanks!

Upvotes: 1

Views: 167

Answers (1)

Andrei Stefan
Andrei Stefan

Reputation: 52366

You need your _id field to be not_analyzed or analyzed with the keyword analyzer so that, when indexed by ES, to stay unchanged.

Also, for a query like yours, for _id it is best to use a filter of type term. I am no php developer, but from ES point of view it should look like this:

      "_id": {
        "type": "string",
        "index": "not_analyzed"
      }

And the query should be of this form, for _id:

  "query": {
    "filtered": {
      "filter": {
        "term": {
          "owner._id": "twitter:2383339242"
        }
      }
    }
  }

Upvotes: 1

Related Questions