【发布时间】:2016-01-20 14:52:48
【问题描述】:
我是一名初学者,正在使用 elasticsearch php 进行简单搜索。 我必须根据是否选择过滤器的天气有条件地设置过滤器。 因此,我为该特定任务制作了过滤器并将它们放在不同的文件中。我所做的就是在isset 返回true 时包含这些文件。 但问题是,如果选择了多个过滤器,那么最后一个过滤器会覆盖数组的过滤器部分,并且不提供所需的多个过滤器答案。有没有办法使这项工作? (如果我是初学者并且正在努力学习,如果效率低下,请原谅我。)
我的文件是这样的
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]
]
];
}
年龄过滤器.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过滤器。这是文档:elastic.co/guide/en/elasticsearch/reference/1.4/… -
可以显示
OnlyQuery.php的内容吗? -
@Samir 'AND' 不支持 'gte' 和 'lte' 过滤器
标签: php elasticsearch