Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将多个solr Faceted搜索合并为一个_Php_Lucene_Solr_Facet_Faceted Search - Fatal编程技术网

Php 将多个solr Faceted搜索合并为一个

Php 将多个solr Faceted搜索合并为一个,php,lucene,solr,facet,faceted-search,Php,Lucene,Solr,Facet,Faceted Search,我有一系列的产品。对于每一种产品,我都必须进行solr分面搜索 以下产品的示例: Computer TV MP3-Player 通过使用分面搜索,我想确定每个产品在field product中存在的频率。 结果如下 Comupter (3) -apple -ibm -dell TV (5) -sony -toshiba [...] MP3-player (10) -[...] 现在,我意识到,通过对每个单词/产品进行单方面搜索。 这是可行的,但通过使用以下选项,结

我有一系列的产品。对于每一种产品,我都必须进行solr分面搜索

以下产品的示例:

Computer
TV
MP3-Player
通过使用分面搜索,我想确定每个产品在field product中存在的频率。 结果如下

Comupter (3)
  -apple
  -ibm
  -dell
TV (5)
  -sony
  -toshiba
  [...]
MP3-player (10)
  -[...]
现在,我意识到,通过对每个单词/产品进行单方面搜索。 这是可行的,但通过使用以下选项,结果将在400ms内返回:

'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搜索,搜索时间为400ms——因此脚本运行40秒,这太长了。 我无法在没有fq=的情况下对所有产品进行无限制/无限制的分面搜索,因为有数千种产品,我不需要每个产品的信息

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


谢谢大家!

我不太明白这一点,但您能否为与查询相关的产品创建一个筛选查询:

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

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

在刻面时,您通常不希望筛选特定类型的值。刻面背后的思想是,它将对与原始查询匹配的所有项的刻面字段中的所有值进行分组和计数


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

对不起,我的问题不够明确。所以我更新了上面的例子。如你所见,我对频率和产品制造商感兴趣。通过运行您的示例,我一次获得了所有制造商,但没有特定产品的信息。您控制模式吗?你能添加字段吗?一种方法是存储连接的信息,如计算机/Ibm等,严格来说,这是一种分类法,然后在客户中解码。我怀疑你会得到电视的结果。对不起,我的问题不够精确。请看一下示例的更新。我要做的是在客户端缓存分类法,为产品创建一个方面,获取电视、计算机等的计数,然后在客户端生成列表,形成缓存的分类法。这是因为您对第二级的计数不感兴趣。如果您是,我建议您使用Karls建议,为分类法编制索引,并在客户机中为每个请求解析分类法。