我想使用“更喜欢这个”查询来查找类似文档并折叠那些具有相同值的字段'image'。我尝试使用Field Collapsing parameters,但它们似乎不适用于“更像这样”。
以下是我的代码片段。你能告诉我如何使用“更喜欢这个”查询来折叠结果吗?
$url = "http://{$host}:{$port}/solr/{$core}/mlt";
$data = [
'stream.body' => $content,
'fl' => 'image,content,title,signature',
'start' => 0,
'order' => "score desc",
'wt' => 'json',
'mlt.fl' => 'content,title',
// these lines do nothing ---v
'group' => 'true',
'group.field' => 'image',
'group.sort' => 'impressions desc',
'group.main' => 'true'
];
$curlHandle = curl_init($url);
$options = array (
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $data
);
curl_setopt_array($curlHandle , $options);
$result = json_decode(curl_exec($curlHandle));
答案 0 :(得分:0)
我无法使用Field Collapsing paramaters折叠结果。但是,我能够使用CollapsingQParserPlugin获得所需的结果。
以下过滤器查询会折叠字段' image'上的文档。并选择字段值最高的那个'展示次数':{!collapse field=image max=impressions}
出于某种原因,我无法将此过滤查询与我在键下的其他过滤查询相结合,如下所示:
$filterQueries = [
"-signature:{$signature}",
...
"{!collapse field=image max=impressions}"
];
$data = [
...
'fq' => implode(' AND ', $filterQueries),
...
];
这产生了错误:Query没有实现createWeight
我的修复是做一个GET请求(而不是POST,这是在上面的问题中完成的)。使用GET请求,可以为每个过滤查询设置一个键:http://solr-url/mtl?...&fq=-signature%3A0&...&fq=%7B!collapse+field%3Dimage+max%3Dimpressions%7D
以下是问题中代码段的php解决方案:
$url = "http://{$host}:{$port}/solr/{$core}/mlt?"; // Note the added question mark
$data = [
'stream.body' => $content,
'fl' => 'image,content,title,signature',
'fq' => $filterQueries,
'start' => 0,
'order' => "score desc",
'wt' => 'json',
'mlt.fl' => 'content,title'
];
$params = [];
foreach ($data as $key=>$value) {
if (is_array($value)) {
foreach ($value as $subvalue) {
$subvalue = urlencode($subvalue);
$params[] = "{$key}={$subvalue}";
}
} else {
$value = urlencode($value);
$params[] = "{$key}={$value}";
}
}
$url .= implode('&', $params);
$curlHandle = curl_init($url);
$options = array ();
curl_setopt_array($curlHandle , $options);
$result = json_decode(curl_exec($curlHandle));