我的架构中有一个名为XXX的多值字段。在我的Solr中可能有更多的10,0000个文档,我想知道XXX中存在多少值而没有任何重复。
目前,我使用facet.field = XXX& facet.limit = -1来获取构面结果大小。它将花费大量时间,有时会发生Read Timeout。
我想要的facet结果只是'size',我不关心内容。
顺便说一下,我使用Solr 5.0,还有其他更好的解决方案来解决我的需求吗?
答案 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详细信息。