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"
}
}
}
}
这是我的第一个问题,我在通过 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"
}
}
}
}