我的索引很大,我的用户只能查看一些结果,但是如果我用facet=on
执行查询,我将获得所有索引构面,而不仅是查询结果的构面。我在Laravel中使用Guzzle,由于查询字符串很长,我需要使用post而不是get,因此我使用表单参数“ q”来查询Solr,并且将构面附加到url:
查询参数示例
$searchQuery = [
"q" => "({!terms f=isbn_s}9788808440877,9788808342010,9788808820914,9788808504005, ...) AND (title_s:**)"
"wt" => "json"
"indent" => true
"facet" => "on"
"rows" => 9
"sort" => "title_s asc"
"start" => 0
"f.subjects_ss.facet.mincount" => 0
"f.year_ss.facet.mincount" => 0
"f.authors_ss.facet.mincount" => 0
]
查询网址示例
$url = env('BASE_URL') . "/select?facet.field=subjects_ss&facet.field=year_ss&facet.field=authors_ss"
枪口POST请求
$request = $client->request("POST", $url, [
'headers' => [
'Content-type' => 'application/x-www-form-urlencoded',
'Accept' => 'application/json'
],
'form_params' => $searchQuery
]);
我得到的结果的一个示例是:
"facets": {
"subjects": {
"math": 35,
"english": 24,
"italian": 0,
"physics": 0
}
}
但是我想要这样的东西:
"facets": {
"subjects": {
"math": 35,
"english": 24
}
}
有可能吗?我需要在构面字段中使用mincount=0
来向用户显示所有构面(也为空),但是我不想显示与“基本”查询无关的构面
编辑
为了澄清:我想使用facet.mincount = 1
执行查询,并且要在结果子集上使用facet.mincount = 0
进行新查询。第一个查询是“基础”查询,结果子集被视为要从中搜索的新索引