0

我有一系列产品。对于每个产品,我都必须创建一个 solr faceted 搜索。

以下“产品”的示例:

Computer
TV
MP3-Player

通过使用分面搜索,我想确定每种产品在 PRODUCT 字段中存在的频率。结果如下

Comupter (3)
  -apple
  -ibm
  -dell
TV (5)
  -sony
  -toshiba
  [...]
MP3-player (10)
  -[...]

现在,我意识到通过对每个单词/产品使用一个多面搜索。这可行,但使用以下选项在 400 毫秒内返回结果:

'facet' => 'true'
'facet.field' => 'PRODUCT'
'facet.method' => 'enum'
 'facet.limit'=>200
'facet.mincount'=>4
 'fq' => 'PRODUCT:computer'    <- by iterating an array with PHP i change the product (computer,tv,...) on every iteration

不幸的是,在现实生活中没有 3 种产品(如上面的示例),大约有 100 种相关产品。这意味着:PHP 脚本必须请求 100 次 solr 搜索,时间为 400 毫秒 - 所以脚本运行 40 秒,这太长了。我无法对“所有”产品(没有“fq =”)进行无限制/无限制的多面搜索,因为有成千上万的产品,我不需要每个人的信息。

有没有办法实现更好的性能,例如将这些多个 solr 请求合并为一个?

谢谢!

4

2 回答 2

0

我不太明白,但你不能只为与查询相关的产品创建一个过滤查询:

facet' => 'true'
'facet.field' => 'PRODUCT'
'facet.method' => 'enum'
'facet.limit'=>200
'facet.mincount'=>4
'fq' => 'PRODUCT:(computer OR tv OR mp3-player)'

然后对返回的结果做一些处理?

于 2011-06-17T11:42:22.407 回答
0

您通常不想在分面时过滤特定类型的值。分面背后的想法是,它将对分面字段中的所有值(对于与原始查询匹配的所有项目)进行“分组”和“计数”。

如果您只是删除 fq 参数,您将看到作为回报,您将获得 PRODUCT 字段中至少出现 4 次的所有值的列表以及每个值的计数。

于 2011-06-17T11:46:53.607 回答