我是一名初学者,正在研究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'过滤器 –