我正在尝试使用 PHP Elasticsearch 客户端,但我无法找出为什么我的代码没有显示任何结果
例如,我想搜索此产品(按其品牌)。它存在于索引 shop-7
现在我用这段代码用 ES PHP 搜索品牌
use Elastic\Elasticsearch\ClientBuilder;
$shop = Shop::find(7);
$query = [];
$query['bool']['must'] = ['match' => ['brand' => 'TRIUSO']];
$params = [
'index' => 'shop-' . $shop->id,
'size' => 20,
"track_total_hits" => true,
'body' => [
'query' => $query
]
];
print_r($params);
$client = ClientBuilder::create()->build();
$results = $client->search($params);
print_r($results['hits']['hits']);
我得到一个空的结果(为了完整性我添加了完整的参数)
Array
(
[index] => shop-7
[size] => 20
[track_total_hits] => 1
[body] => Array
(
[query] => Array
(
[bool] => Array
(
[must] => Array
(
[match] => Array
(
[brand] => TRIUSO
)
)
)
)
)
)
Array
(
)
也许你们中的一个人看到我在这里做错了什么。可悲的是,ES 只返回一个空数组 :)
干杯 阿德里安
尝试使用 bool 过滤器子句,因为您需要完全匹配。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
这个字段的映射数据类型是什么? https://www.elastic.co/guide/en/elasticsearch/reference/8.6/mapping-types.html
$body =[
'query' =>
['bool' =>
['filter' =>
['term' =>
[
'brand' =>'TRIUSO'
]
]
]
]
];