ElasticSearch php sdk 简单查询不工作

ElasticSearch php sdk simple query not working

这是我的第一个问题,我在通过 php sdk 进行简单的弹性搜索查询时遇到问题,json 示例:

{
"_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
}

我需要做的是通过 owner._id 过滤,我正在这样做:

    $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);

结果是没有过滤器。数据库中的所有事件都回来了。

我完全按照文档操作,但没有结果,显然我遗漏了一些东西

谢谢!

您的 _id 字段需要 not_analyzed 或使用 keyword 分析器进行分析,以便在被 ES 索引时保持不变。

此外,对于像您这样的查询,对于 _id,最好使用 term 类型的 filter。我不是 php 开发人员,但从 ES 的角度来看它应该是这样的:

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

并且查询应该是这种形式,对于 _id:

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