【问题标题】:How to add more details per result to solr facet?如何将每个结果的更多细节添加到 solr facet?
【发布时间】:2018-12-15 09:54:35
【问题描述】:

我正在返回一个来自 solr 6.4.1 的结果,我的目标是:

  1. 拨号
  2. dial_id
  3. 拨号计数(多少个结果)

因为我想将名称(例如“黑色”)显示为带有结果数量的方面,并创建一个稍后将对其进行过滤的链接。

例如:

/search?dial_id=48

背后的原因是我不想创建这样的 URL:

/search?dial=Grün

刻面现在是这样的:

<lst name="dial">
   <int name="Rot">5</int>
   <int name="Grün">4</int>
</lst>

通过 PHP 创建:

foreach($this->setFacet AS $facet) $this->query->addFacetField(''.$facet.''); 

明显缺少身份证

我的检索代码目前如下所示:

function facete_dial(){
    foreach( $this->response->facet_counts->facet_fields->dial AS $dial => $count){
        $this->dial_facetes[$dial] = $count;    
    }
    return $this->dial_facetes;
}

成功返回结果的颜色和数量。

如何将 dial_id 添加到 facete 以便以后检索它?还是有更好的方法来完成这项任务?

【问题讨论】:

    标签: php solr faceted-search


    【解决方案1】:

    直接的解决方案是创建一个辅助字段 - 使用显示值和 dial_id 的组合值,并在两者之间组合一个分隔符。

    即索引值48|Grün,然后在您的PHP代码中执行list($dial_id, $dial_name) = explode('|', $facet_name)

    由于分面是“该字段中存在多少不同的标记及其计数”,因此不同字段与其值之间没有任何内在的相关性。

    创建一个组合字段,然后从该字段中提取值可以解决该问题。

    另一个选项是对dial_id =&gt; dial_name 信息进行二次查找,例如在 MySQL 或键/值存储中。或者,如果信息很少更新,则在每次更新时生成一个带有关联数组的 PHP/JSON 文件,并在您的应用程序中包含/读取该文件以将 id 解析为名称。

    【讨论】:

    • 谢谢。采用直截了当的方式,它的工作原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多