0

我正在使用 Solr 方面字段,遇到了一个我不理解的性能问题。考虑以下两个查询:

  1. q=单词&facet.field=CONTENT&facet=true&facet.prefix=&facet.limit=10&facet.mincount=1&facet.method=enum&rows=0
  2. q=一个&facet.field=CONTENT&facet=true&facet.prefix=&facet.limit=10&facet.mincount=1&facet.method=enum&rows=0

唯一的区别是第一个查询中为空facet.prefix

第一个查询在大约 20 秒后返回(QTime结果为 20000),而第二个查询只需要 80 毫秒(QTime80)。为什么是这样?

作为旁注:facet.method=fc使查询“永远”运行并最终以org.apache.solr.common.SolrException: Too many values for UnInvertedField faceting on field CONTENT.

这是 Solr 1.4。

4

3 回答 3

2

从这个文档:http ://docs.lucidworks.com/display/solr/Faceting

facet.prefix 参数将要分面的术语限制为以给定字符串前缀开头的术语。

这意味着您可以通过更少的条款来面对。现在,我很确定分面时间包含在 Qtime 中(正如这篇文章所证明的那样:http: //www.mail-archive.com/solr-user@lucene.apache.org/msg39859.html)。

所以这意味着更少的条款,更少的时间。

于 2013-10-18T13:10:39.900 回答
0

也许不在 CONTENT 上刻面,因为这可能有许多不同的术语,而且刻面毫无意义。尝试在类别字段或其他具有较少唯一术语的字段上进行分面。

于 2013-10-18T14:31:09.430 回答
0

您是否尝试在 Solr 服务器重新启动后以相反的顺序执行它们?

通常第一个查询需要更多时间,如果下一个查询碰巧与之前的任何一个查询有更多共同点,就会有缓存命中,响应时间会令人难以置信。

此外,请注意“枚举”更适合其中唯一术语数量较少的方面字段。

另外,尝试增加过滤器缓存。到一个非常大的数字并检查您的缓存命中率

 SOLR_DOMAIN:PORT/solr/#/collection1/plugins/cache?entry=fieldValueCache,filterCache
于 2013-10-18T16:31:13.567 回答