如何获得Solr Facet结果的大小?

时间:2015-05-14 06:35:43

标签: java solr facet

我的架构中有一个名为XXX的多值字段。在我的Solr中可能有更多的10,0000个文档,我想知道XXX中存在多少值而没有任何重复。

目前,我使用facet.field = XXX& facet.limit = -1来获取构面结果大小。它将花费大量时间,有时会发生Read Timeout。

我想要的facet结果只是'size',我不关心内容。

顺便说一下,我使用Solr 5.0,还有其他更好的解决方案来解决我的需求吗?

1 个答案:

答案 0 :(得分:0)

索引确实维护了一个唯一术语列表,因为这就是倒排索引的工作方式。与分面不同,计算和返回的速度也非常快。如果您的价值观是单一术语,那么这可能是达到您想要的方式。鉴于在solrconfig.xml中启用了TermsComponent,有一种方法可以获得唯一的术语。例如:

http://localhost:8983/solr/corename/terms?q=*%3A*&wt=json&indent=true&terms=true&terms.fl=XXX

会返回所有唯一字词及其计数的列表:

{
  "responseHeader":{
  "status":0,
  "QTime":0},
  "terms":{
    "XXX":[
    "John Backus",3,
    "Ada Lovelace",3,
    "Charles Babbage",2,
    "John Mauchly",1,
    "Alan Turing",1
    ]
  }
}

此列表的长度是唯一术语的数量,在示例中为5.不幸的是,API不提供仅仅要求计数的方法,而不返回术语列表,因此它具有生成列表的速度优势,返回完整列表所需的时间量使得它与facet方法具有类似的缺点。此外,返回的列表可能会变得很长。

查看https://wiki.apache.org/solr/TermsComponent了解API详细信息。