我是一名初學者,正在研究elasticsearch php進行簡單搜索。 我必須根據過濾器是否被選擇的天氣來有條件地設置過濾器。 因此,我已經爲該特定任務製作了過濾器,並將它們放置在不同的文件中。我所做的是在isset返回true時包含這些文件。 但問題是,如果選擇了多個過濾器,則最後一個過濾器會覆蓋數組的過濾器部分,並且不會提供所需的多個過濾答案。無論如何做這項工作? (請原諒我,如果這是低效的,因爲我是一個初學者,只是努力學習。)將多個過濾器添加到ElasticsearchPhp中的現有過濾器
我的文件是這樣的
BalFilter.php
<?php
if ($val == 1) {
$params['body']['query']['filtered']['filter'] = ['range' => [
'balance' => ['gte' => $bal]
]
];
}
if ($val == 2) {
$params['body']['query']['filtered']['filter'] = ['range' => [
'balance' => ['lte' => $bal]
]
];
}
AgeFilter.php
<?php
$params['body']['query']['filtered']['filter']['term'] = ['age' => $age];
OnlyQuery.php
<?php
$params['body']['query']['filtered']['query'] = [ 'query_string' => [
'default_field' => '_all',
'query' => $q,
'lenient' => true
]
];
,並在主索引
if (isset($_GET['age'])) {
$age = $_GET['age'];
} else {
$age = 0;
}
if (isset($_GET['val'])) {
$val = $_GET['val'];
} else {
$val = 0;
}
if (isset($_GET['bal'])) {
$bal = $_GET['bal'];
} else {
$bal = 0;
}
include "OnlyQuery.php";
if ($age != 0) {
include "AgeFilter.php";
}
if (($val == 0 && $bal != 0) || ($val != 0 && $bal == 0)) {
echo "Please choose the right combination for balance";
}
if ($val != 0 && $bal != 0) {
include "BalFilter.php";
}
對於多個過濾器,你可以使用'AND'過濾器。這裏是文檔:https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-and-filter.html – Samir
你可以顯示'OnlyQuery.php'的內容嗎? – Val
@Samir'AND'不支持'gte'和'lte'過濾器 –