从 elasticsearch-php 中的搜索中按 ID 排除结果


Exclude a result by ID from search in elasticsearch-php

我在尝试类似的东西:

$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 排除该结果,而是仅显示该结果。

注意:我自己想通了。在答案部分添加

正确的查询是ids不是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];

试试这个

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

根据此链接https://www.elastic.co/guide/en/elasticsearch/guide/current/combining-filters.html,为了组合多个过滤器,所有过滤器都需要在布尔滤波器下。

所以在我全部更改为:

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