elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

在elasticsearch php中从搜索中排除按ID显示的结果

在elasticsearch php中从搜索中排除按ID显示的结果,php,elasticsearch,Php,elasticsearch,我在尝试类似这样的东西: $params['body']['query']['bool']['must_not']['id']['value']=$pid; 但它不起作用。需要一些关于正确语法的帮助吗 完整代码: $pid = $_GET['pid']; $params = array(); $params['index'] = 'xyz'; $params['type'] = 'product'; $params['body']['query']['filtered']['filter'][

我在尝试类似这样的东西:

$params['body']['query']['bool']['must_not']['id']['value']=$pid;
但它不起作用。需要一些关于正确语法的帮助吗

完整代码:

$pid = $_GET['pid'];
$params = array();
$params['index'] = 'xyz';
$params['type'] = 'product';
$params['body']['query']['filtered']['filter']['and'][]['term']['userid'] = $uid;
$params['body']['query']['filtered']['filter']['and'][]['term']['categoryid3'] = $pc;
$params['body']['query']['bool']['must_not']['id']['value']=$pid;
$params['size'] ='5';
$result = $client->search($params);
更新了完整代码

$pid = $_GET['pid'];
$params = array();
$params['index'] = 'xyz';
$params['type'] = 'product';
$params['body']['query']['filtered']['filter']['and'][]['term']['userid'] = $uid;
$params['body']['query']['filtered']['filter']['and'][]['term']['categoryid3'] = $pc;
$params['body']['query']['filtered']['filter']['not'][]['ids']['values'] = [$pid];
$params['size'] ='5';
$result = $client->search($params);
它不再使用pid排除该结果,而是只显示该结果

注意:我自己解决了。.在答案部分添加了。

试试这个

$pid = 25;
$params = array();
$params['body']['query']['bool']['must_not']['id']['value']=$pid;
试试这个

$pid = 25;
$params = array();
$params['body']['query']['bool']['must_not']['id']['value']=$pid;

正确的查询不是
id

$params['body']['query']['bool']['must_not']['ids']['values'] = [$pid];
                                                ^         ^     ^    ^
                                                |         |     |    |
                                             fix this and this and this
除此之外,你的问题是格式错误的,它应该是正确的

$params['body']['query']['filtered']['filter']['not'][]['ids']['values'] = [$pid];

正确的查询不是
id

$params['body']['query']['bool']['must_not']['ids']['values'] = [$pid];
                                                ^         ^     ^    ^
                                                |         |     |    |
                                             fix this and this and this
除此之外,你的问题是格式错误的,它应该是正确的

$params['body']['query']['filtered']['filter']['not'][]['ids']['values'] = [$pid];
根据这个链接 ,为了组合多个过滤器,所有过滤器都需要使用布尔过滤器

因此,在我将所有内容更改为:

 $params['body']['query']['bool']['must'][]['term']['userid'] = $uid;
 $params['body']['query']['bool']['must'][]['term']['categoryid2'] = $pc;

 $params['body']['query']['bool']['must_not'][]['ids']['values'] = [$pid];
根据这个链接 ,为了组合多个过滤器,所有过滤器都需要使用布尔过滤器

因此,在我将所有内容更改为:

 $params['body']['query']['bool']['must'][]['term']['userid'] = $uid;
 $params['body']['query']['bool']['must'][]['term']['categoryid2'] = $pc;

 $params['body']['query']['bool']['must_not'][]['ids']['values'] = [$pid];

我想从搜索特定$pid时排除一个结果。搜索结果不会显示该id值。是否要从结果中排除“\u id”字段..?不仅是该id的\u id字段,还有该id的整个结果。搜索结果不应包括该id的任何数据。我要从搜索该特定$pid时排除结果。搜索结果不会显示该id值。是否要从结果中排除“\u id”字段..?不仅是该id字段,还有该id的整个结果。搜索结果不应包括该id中的任何数据。*67在stderr中发送的FastCGI:“PHP消息:PHP致命错误:未捕获异常'Guzzle\Http\exception\ClientErrorResponseException',并在/usr/local/openresty/vendor/Guzzle/Guzzle/src/Guzzle/Http/exception/BadResponseException中显示消息'Client error response[status code]400[reason Phase]Bad Request[url]”。PHP:43尝试在数组中封装$pid
…=[$pid]
嗯,我的错……实际上它不起作用。它现在只显示该id的结果。就像“不”被视为“请用您现在拥有的当前代码再次更新您的问题(例如更新2)?在我将它们全部放在[bool]部分*67 FastCGI发送到stderr后,修复了它:“PHP消息:PHP致命错误:未捕获异常'Guzzle\Http\exception\ClientErrorResponseException',并在/usr/local/openresty/vendor/Guzzle/Guzzle/src/Guzzle/Http/exception/BadResponseException中显示消息'Client error response[status code]400[reason Phase]Bad Request[url]”。PHP:43尝试在数组中封装$pid
…=[$pid]
嗯,我的错……实际上它不起作用。它现在只显示该id的结果。就像“不”被视为“请用您现在拥有的当前代码再次更新您的问题(例如更新2)?在我将它们全部放在[bool]部分后修复了它