[英]What if all filter not applied? filter with null FIELD VALUE not NULL value in DOC
我有搜索主題。 教師可以添加多個科目,學生可以搜索這些科目並可以對結果數據應用過濾器。 學生可以按級別、課程、位置進行篩選。
我的查詢是如果學生沒有應用 LOCATION 過濾器怎么辦?
我在過濾器中傳遞位置字符串對我來說一切正常..但是當我不應用位置過濾器時..它給了我沒有為文本查詢指定的文本。
這是我的查詢:
$client = ClientBuilder::create()->build();
$location = $request->location;
$level = $request->level;
$curriculum = $request->curriculum;
$params = [
'index' => 'tutors',
'body' =>
[
"query" => [
"bool" => [
"must" => [
[ "term" => [ "approved" => 1 ]],
[ "match" => [ "country_en_name" => $location ]],
[ "match" => [ "local_rates.levels" => $level ]],
[ "match" => [ "local_rates.curriculums" => $curriculum ]],
]
],
]
]
];
$search = $client->search($params);
我也嘗試過這樣的 NULL 或 EMPTY 值
$client = ClientBuilder::create()->build();
$location = $request->location;
$level = $request->level;
$curriculum = $request->curriculum;
$params = [
'index' => 'tutors',
'body' =>
[
"query" => [
"bool" => [
"must" => [
[ "term" => [ "approved" => 1 ]],
$location && $location != null ? [ "match" => [ "country_en_name" => $location ]] : '',
$level && $level != null ? [ "match" => [ "local_rates.levels" => $level ]] : '',
$curriculum && $curriculum != null ? [ "match" => [ "local_rates.curriculums" => $curriculum ]] : '',
]
],
]
]
];
$search = $client->search($params);
但是沒有用,誰能幫幫我?
您不能在bool/must
查詢中添加空查詢。 您需要逐步構建查詢:
$params = [
'index' => 'tutors',
'body' =>
[
"query" => [
"bool" => [
"must" => [
[ "term" => [ "approved" => 1 ]],
]
],
]
]
];
if ($location && $location != null) {
$params['body']['query']['bool']['must'][] = [ "match" => [ "country_en_name" => $location ]];
}
if ($level && $level != null) {
$params['body']['query']['bool']['must'][] = [ "match" => [ "local_rates.levels" => $level ]];
}
if ($curriculum && $curriculum != null) {
$params['body']['query']['bool']['must'][] = [ "match" => [ "local_rates.curriculums" => $curriculum ]];
}
$search = $client->search($params);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.