如何使用solr php客户端使用多值字段进行有效的分面搜索?

时间:2010-11-24 20:13:57

标签: php solr

我正在尝试为我的网站设置分面搜索,但遇到了问题。

构面字段设置为动态多值字段。虽然大多数产品每个分面字段只有一个值(指定为fq_ *,其中*是要存储的产品属性的属性ID),但有些产品具有多个值。

分面搜索工作得非常好 - 非常快速,直到我尝试访问我们的产品类别,其中一个或多个产品在分面属性上具有多个值。对于这个类别(以及其他类似的)我从php solr客户端收到错误:“500”状态:内部服务器错误。

搜索了一段时间后,我发现将facet.method设置为“enum”表示它解决了错误 - 但是这增加了显着加载页面所需的时间。

有没有办法以更高效率进行这样的分面搜索? (我可以处理它比“fc”方法花费更长的时间,但不多)。

感谢。

编辑(这是参数):

$solr->search('categoryid:4810', 0, 15, array(8) {
  ["sort"]=>
  string(17) "price_Default asc"
  ["facet"]=>
  string(4) "true"
  ["facet.field"]=>
  array(12) {
    [0]=>
    string(7) "mfgname"
    [1]=>
    string(14) "fq_33111116587"
    [2]=>
    string(14) "fq_33111116586"
    [3]=>
    string(14) "fq_33111114704"
    [4]=>
    string(11) "fq_33113118"
    [5]=>
    string(9) "fq_331472"
    [6]=>
    string(10) "fq_3312052"
    [7]=>
    string(9) "fq_331611"
    [8]=>
    string(10) "fq_3312304"
    [9]=>
    string(14) "fq_33111116919"
    [10]=>
    string(9) "fq_331100"
    [11]=>
    string(9) "fq_331710"
  }
  ["facet.sort"]=>
  string(5) "false"
  ["facet.mincount"]=>
  int(1)
  ["facet.missing"]=>
  string(5) "false"
  ["facet.limit"]=>
  int(-1)
  ["facet.method"]=>
  string(4) "enum"
}
);

1 个答案:

答案 0 :(得分:0)

你可能遇到的内存问题不是Solr,而是Tomcat ...... Solr的刻面占用大量内存,而Tomcat的常用设置是内存设置非常低,增加了JAVA_OPTS的内存:

(linux)export JAVA_OPTS =“ - Xmx3500m -Xms3500m”

或您处理的信息量和服务器可用的其他适当值。

以下是一些很好的资源: http://wiki.apache.org/tomcat/FAQ/Memory http://helpdeskgeek.com/how-to/increase-tomcat-memory-allocation/