首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于更多类似于以下查询的Solr FieldCollapsing

对于更多类似于以下查询的Solr FieldCollapsing
EN

Stack Overflow用户
提问于 2015-02-17 14:19:35
回答 1查看 529关注 0票数 1

我想使用一个“更像这样”的查询来查找类似的文档,并折叠那些对字段‘映像’具有相同价值的文档。我试着使用场崩塌参数,但是它们似乎不适合“更像这样”。

下面是我的代码片段。您能告诉我如何使用“更像这个”查询来折叠结果吗?

代码语言:javascript
复制
$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));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-25 16:40:56

一般答案

我无法使用字段折叠参数来折叠结果。但是,我能够使用CollapsingQParserPlugin实现所需的结果。以下筛选器查询折叠字段“图像”上的文档,并为字段“印象”选择值最高的文档:{!collapse field=image max=impressions}

实现

由于某些原因,我无法将此筛选器查询与其他筛选器查询合并到一个单一键下,如下所示:

代码语言:javascript
复制
$filterQueries = [
    "-signature:{$signature}",
    ...
    "{!collapse field=image max=impressions}"
];
$data = [
    ...
    'fq' => implode(' AND ', $filterQueries),
    ...
];

这产生了错误:查询没有实现createWeight

我的修正是执行GET请求(而不是在上面的问题中完成的POST )。对于GET请求,可以为每个筛选器查询拥有一个键:http://solr-url/mtl?...&fq=-signature%3A0&...&fq=%7B!collapse+field%3Dimage+max%3Dimpressions%7D

下面是问题中的代码片段的php解决方案:

代码语言:javascript
复制
$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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28563507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档