我正在使用Solr facet字段并遇到一个我不明白的性能问题。考虑这两个问题:
q=
的字 &facet.field=CONTENT&facet=true&facet.prefix=&facet.limit=10&facet.mincount=1&facet.method=enum&rows=0
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毫秒(QTime
80)。这是为什么?
并注意:facet.method=fc
使查询“永远”运行,并最终以org.apache.solr.common.SolrException: Too many values for UnInvertedField faceting on field CONTENT
失败。
这是Solr 1.4。
答案 0 :(得分:2)
来自此文档:http://docs.lucidworks.com/display/solr/Faceting
facet.prefix参数限制了与其相关的术语 从给定的字符串前缀开始。
这意味着您可以通过较少的条款来面对。 现在,我非常确定Qtime中包含了刻面时间(正如这篇文章所示:http://www.mail-archive.com/solr-user@lucene.apache.org/msg39859.html)。
这意味着更少的条款,更少的时间。
答案 1 :(得分:0)
也许不是内容的一个方面,因为这可能有很多不同的术语,并且没有任何意义。尝试使用较少的唯一术语在类别字段或其他字段上进行分面。
答案 2 :(得分:0)
重新启动Solr服务器后,您是否尝试以相反的顺序执行它们?
通常第一个查询需要花费更多时间,如果下一个查询碰巧与之前的任何查询有更多共同点,那么缓存命中和响应时间就会令人难以置信。
此外,请注意' enum'更适合于具有较少数量的唯一术语的分面字段。
此外,尝试将filter-cache.增加到一个非常大的数字并检查您的缓存命中率
SOLR_DOMAIN:PORT/solr/#/collection1/plugins/cache?entry=fieldValueCache,filterCache