我到处搜索,但没有一个答案符合我的要求。 我的代码是这样的:
档案1
<?php
if($year != 0)
{
$temp = strval($year);
$term =[
"range" => [
"decidedon" => [
"gte" => $temp."-01-01",
"lte" => $temp."-12-31"
]
]
];
array_push($params['body']['query']['filtered']['filter']['bool']['must'], $term);
}
文件2
<?php
$dummy = explode(" ",$cor);
$params['body']['query']['filtered']['filter']['bool']['must'] = ['terms'=> ['court' => $dummy] ];
我将它们包含在不同实例的索引页面中,如下所示
if(isset($_GET['cor'])){
$cor = $_GET['cor'];
if(strcasecmp($cor,"all")!=0){
include 'courtfilter.php';
}
}
if(isset($_GET['year'])){
$year = $_GET['year'];
if($year != 0){
include 'yearfilter.php';
}
}
当我运行查询时,它表示术语和范围不能嵌套在一起。 有人能告诉我一个更好的方法来做到这一点,而不会使我的程序复杂化或不必为这两个编写单独的过滤器?
(我是初学者,请原谅我,如果我错了,或者这太琐碎了。)
答案 0 :(得分:1)
你几乎就在那里。在第二个文件中,您需要将terms
插入must
,如下所示:
$params['body']['query']['filtered']['filter']['bool']['must'] = [['terms'=> ['court' => $dummy] ]];
^ ^
| |
add this .....................and this
即。 <{1}}必须是一个数组,并且您直接为它分配一个对象/哈希。
更好的方法是在包含任何文件之前(即bool/must
之前)初始化must
子句。您首先要初始化if(isset($_GET['cor']))
数组,如下所示:
bool/must
然后在您收录的两个文件中,您只需按照文件$params['body']['query']['filtered']['filter']['bool']['must'] = [];
中的array_push()
进行yearfilter.php