2013-01-23 5 views
5

का उपयोग करके फ़ेसटिंग मैं इस साइट पर संबंधित प्रश्नों से गुजर चुका हूं लेकिन मुझे कोई प्रासंगिक समाधान नहीं मिला है।SolrJ और Solr4

जब मेरे Solr4 सूचकांक में जानना चाहते प्रपत्र

&facet=true&facet.field=country 

प्रतिक्रिया का एक HTTP अनुरोध का उपयोग कर देश के आधार पर गिना जाता है के साथ सब अलग-अलग देशों में शामिल है।

मैं SolrJ का उपयोग करके यह जानकारी कैसे प्राप्त कर सकता हूं? मैं निम्नलिखित की कोशिश की है लेकिन यह केवल सभी देशों में कुल मायने रखता है देता है, देश के लिए नहीं:

solrQuery.setFacet(true); 
solrQuery.addFacetField("country"); 

निम्नलिखित काम करने के लिए प्रतीत होता है, लेकिन मैं स्पष्ट रूप से सभी समूहों पहले से स्थापित करने के लिए नहीं करना चाहती:

solrQuery.addFacetQuery("country:usa"); 
solrQuery.addFacetQuery("country:canada"); 

दूसरा, मुझे यकीन नहीं है कि QueryResponse ऑब्जेक्ट से फ़ेस डेटा निकालने का तरीका कैसे है।

तो दो सवाल:

1) SolrJ का उपयोग कैसे मैं एक मैदान पर पहलू और स्पष्ट रूप से समूहों निर्दिष्ट किए बिना समूहों लौट सकते हैं?

2) SolrJ का उपयोग करके मैं QueryResponse ऑब्जेक्ट से फ़ेस डेटा कैसे निकाल सकता हूं?

धन्यवाद।

अद्यतन:

मैं भी सेर्गेई की प्रतिक्रिया (नीचे) के लिए कुछ इसी तरह की कोशिश की।

List<FacetField> ffList = resp.getFacetFields(); 
log.info("size of ffList:" + ffList.size()); 
for(FacetField ff : ffList){ 
    String ffname = ff.getName(); 
    int ffcount = ff.getValueCount(); 
    log.info("ffname:" + ffname + "|ffcount:" + ffcount);   
} 

उपरोक्त कोड आकार = 1 के साथ ffList दिखाता है और लूप 1 पुनरावृत्ति के माध्यम से चला जाता है। आउटपुट ffname = "country" और ffcount में पंक्तियों की कुल संख्या है जो मूल क्वेरी से मेल खाते हैं।

यहां कोई प्रति देश टूटना नहीं है।

मुझे यह उल्लेख करना चाहिए कि उसी solrQuery ऑब्जेक्ट पर मैं addField और addFilterQuery को भी कॉल कर रहा हूं। सुनिश्चित नहीं हैं कि इस प्रभावों Faceting यदि:

solrQuery.addField("user-name"); 
solrQuery.addField("user-bio"); 
solrQuery.addField("country"); 
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)"); 

अद्यतन 2:

मुझे लगता है कि मैं समझ गया, फिर क्या सेर्गेई नीचे कहा पर आधारित है। मैंने FacetField.getValues ​​() का उपयोग करके सूची ऑब्जेक्ट निकाला।

List<FacetField> fflist = resp.getFacetFields(); 
for(FacetField ff : fflist){ 
    String ffname = ff.getName(); 
    int ffcount = ff.getValueCount(); 
    List<Count> counts = ff.getValues(); 
    for(Count c : counts){ 
     String facetLabel = c.getName(); 
     long facetCount = c.getCount(); 
    } 
} 

उपर्युक्त कोड में लेबल चर प्रत्येक पहलू समूह से मेल खाता है और गणना उस समूह के लिए इसी गणना है।

उत्तर

7

वास्तव में आप पहलू क्षेत्र स्थापित करने के लिए और पहलू सक्रिय हो जाएगा (SolrJ स्रोत कोड की जांच) केवल जरूरत है:

solrQuery.addFacetField("country"); 

आप पहलू की जानकारी के लिए कहाँ देखें?यह होना चाहिए QueryResponse.getFacetFields (getValues.getCount)

+0

धन्यवाद सर्गेई। मैंने आपके दृष्टिकोण का उल्लेख करने के लिए ऊपर दिए गए प्रश्न को अपडेट किया है। –

1

Solr प्रतिक्रिया में आप QueryResponse.getFacetFields() का उपयोग करना चाहिए FacetFields का जो आंकड़ा "देश" के बीच List मिलता है। इसलिए "देश" QueryResponse.getFacetFields().get(0)

द्वारा idenditfied है आप

QueryResponse.getFacetFields().get(0).getValues().get(i) 

का उपयोग कर Count वस्तुओं की List हो और QueryResponse.getFacetFields().get(0).getValues().get(i).getName() का उपयोग कर पहलू के मान का नाम प्राप्त करने के लिए इस पर तो पुनरावृति और इसी वजन

QueryResponse.getFacetFields().get(0).getValues().get(i).getCount() 
का उपयोग कर
संबंधित मुद्दे