是否可以配置Solr,以便queryResponse.getFacetFields()中的基数以合取范式反映查询?

是否可以配置Solr,以便queryResponse.getFacetFields()中的基数以合取范式反映查询?,solr,faceted-search,facet,conjunctive-normal-form,Solr,Faceted Search,Facet,Conjunctive Normal Form,用于分面搜索的ApacheSolrAPI非常直观。使用SolrQuery类,可以轻松构建和连接查询、针对存储库执行主题并处理结果。作为一个非常好的特性,Solr发回一个queryResponse对象,该对象带有一个FaceField列表,该列表提供了剩余方面的调整基数 对于FacetField:queryResponse.getFacetFields { logger.debug facetField.getName; 对于计数:facetField.getValues { logger.deb

用于分面搜索的ApacheSolrAPI非常直观。使用SolrQuery类,可以轻松构建和连接查询、针对存储库执行主题并处理结果。作为一个非常好的特性,Solr发回一个queryResponse对象,该对象带有一个FaceField列表,该列表提供了剩余方面的调整基数

对于FacetField:queryResponse.getFacetFields { logger.debug facetField.getName; 对于计数:facetField.getValues { logger.debug+count.getName++count.getCount+; } } 我的问题是:是否有可能配置Solr,使这些返回的基数反映合取正规CNF中的查询,换句话说,不同方面字段的查询和串联,或相同方面字段的串联

至少在默认配置中,似乎在queryResponse.GetFaceFields中仅假定了字段和串联查询。我希望使用queryResponse.getFaceFields而不使用变通方法,并且希望问题是配置问题

为了更好地理解这一点,这里有一个包含SolrAPI的实际和预期返回值的具体用例:假设有1000个项。每个项目可能有多个概念分配和收集模式。因此,item文档的solr模式有两个字段c表示概念,moc表示收集模式。已为这些字段启用分面搜索

希望很容易理解,这里是伪代码中的相关查询和结果集的基数。Fc:位置是指指定了概念位置的项目集,Fmoc:邮政是指指定了收款方式的项目集。Qi显示查询和结果集,| Qi |是其基数

Q1: F(c:position) 
    -> |Q1| = 252
Q2: F(moc:telefonic) 
    -> |Q2| = 393
Q3: F(moc:postal) 
    -> |Q3| = 464
Q4: F(c:position) AND F(moc:telefonic) 
    -> |Q4| = 14 + 10 = 24
Q5: F(c:position) AND F(moc:postal) 
    -> |Q5| = 33 + 10 = 43
Q6: F(c:position) AND F(moc:telefonic) AND F(moc:postal) 
    -> |Q6| = 10
Q7: F(c:position) AND F(moc:telefonic) AND NOT F(moc:postal) 
    -> |Q7| = 14
Q8: F(c:position) AND F(moc:postal) AND NOT F(moc:telefonic) 
    -> |Q8| = 33
Q9: F(c:position) AND (F(moc:telefonic) OR F(moc:postal)) 
    -> |Q9| = 14 + 10 + 33 = 57
下图显示了集合和子集的基数:

现在我们开始一个特定的搜索:Q9是感兴趣的查询。选择任何面。刻面显示了预期值:第一季度为252,第二季度为393,第三季度为464。用户选择facet c:position并将结果集的基数从1000减少到252。底层查询是Q1。返回的刻面显示moc:telefonic的24个项目和moc:postal的43个项目。这些值表示选择其中一个面会将结果集限制为24=14+10或43=33+10项。在第二步中,用户另外选择facetmoc:postal。底层查询是Q5。结果集的实际基数和期望基数相互对应,为43。到目前为止还不错

facet moc:telefonic的基数是什么?您现在希望在给出带有前一个选择的CNF查询时返回它吗?我要14件。如果我选择facetmoc:telefonic,我的结果集将从43项增加到57项。无休止的Solr展示了10个项目。如果所有方面都是合并和连接的,则这是正确的。作为用户,我感到困惑,因为我的结果集有57项,而不是53项。 //问题5:Fc:位置和Fmoc:邮政 solrDocumentList=queryResponse.getResults; assertEquals 43,solrDocumentList.getNumFound; facetField=queryResponse.getFacetField moc; assertEquals telefonic,facetField.getValues.get 0.getName; //测试失败:返回值为10 assertEquals 14,facetField.getValues.get 0.getCount;