如何为solr方面的每个结果添加更多细节



我从solr 6.4.1返回一个方面的结果,我的目标是:

  1. 拨号
  2. dial_id
  3. 拨号计数(结果数(

因为我想将名称(例如"黑色"(显示为facete和结果数量,并创建一个链接,稍后将对其进行过滤。

例如:

/search?dial_id=48

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

/search?拨号=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.''); 

明显缺少ID

我的检索代码目前看起来是这样的:

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以便稍后检索?或者有更好的方法来完成这项任务吗?

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

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

由于faceting是">此字段中存在多少不同的令牌及其计数",因此不同字段及其值之间没有任何固有的相关性。

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

另一种选择是对dial_id => dial_name信息进行二次查找,例如在MySQL或密钥/值存储中。或者,如果信息是偶尔更新的,那么每次更新时都会生成一个带有关联数组的PHP/JONS文件,并将其包含/读取到应用程序中,以将id解析为名称。

最新更新