2010-09-29 5 views
5

मैं सोलरजे के साथ एक सोलर इंडेक्स खोज रहा हूं और आगे के उपयोग के लिए इसे लॉगिंग के लिए लुसीन स्पष्टीकरण प्राप्त करने की कोशिश कर रहा हूं।Solrj के साथ एक SolrDocument के लिए लुसीन स्पष्टीकरण कैसे प्राप्त करें?

कोड इस प्रकार है:

SolrServer server = new CommonsHttpSolrServer("solr_url"); 
    SolrQuery solrquery = new SolrQuery(); 
    solrquery.set("fl", "score, id"); // id is a String field 
    solrquery.set("rows", "1000"); 
    solrquery.set("debugQuery", "on"); 
    solrquery.setQuery("query words here"); 

    try { 
     QueryResponse response = server.query(solrquery); 
     SolrDocumentList docs = response.getResults(); 
     Iterator<SolrDocument> dociterator = docs.iterator(); 

     while (dociterator.hasNext()) 
     { 
      SolrDocument doc = dociterator.next(); 
      String id = (String) doc.getFirstValue(idfield); 
      Float relevance = (Float) doc.getFirstValue("score"); 
      String explanation = ???; 
     } 
    } catch (SolrServerException e) { 
     e.printStackTrace(); 
    } 

मैं लगा कि response.getEplainMap() response.getEplainMap() की तरह मूल्य के साथ एक नक्शा होते हैं (आईडी) मिलता है, लेकिन यह है कि explainmap लगता है। अंतिम पाए गए दस्तावेज़ के मूल्य के साथ केवल कुंजी शून्य है।

कोई भी विचार सही स्पष्टीकरण कैसे प्राप्त करें?

उत्तर

6

मेरे मामले में सोलर इंडेक्स में एक बग था। नीचे कोड अब काम करता है।

Map<String, String> explainmap = response.getExplainMap(); 
String explanation = explainmap.get(id); 

जब एक सूचकांक बनाने और इसके बाद के संस्करण की तरह समस्या हो रही यह सुनिश्चित करें कि आईडी Schema.xml में निर्धारित क्षेत्र (जैसे <uniqueKey>id</uniqueKey>) सही डेटा शामिल हैं। मेरे मामले में मैंने कोड में उपयोग किया गया आईडी फ़ील्ड उतना ही नहीं था जितना सोलर सोचा था और इसमें कोई डेटा नहीं था, इस प्रकार स्पष्टीकरण में केवल एक फ़ील्ड था जिसमें एक कुंजी नल थी।

1

क्या आपने व्यवस्थापक कंसोल से एक प्रश्न डीबग करने का प्रयास किया है? यह आपको पूरा आउटपुट दिखाता है।

QueryResponse में कुछ विधियां getDebugMap() और getExplainMap() हैं जो उपयोगी साबित हो सकती हैं। मैंने कोड में इसका परीक्षण नहीं किया है, लेकिन जब मैं एक क्वेरी डीबग करता हूं तो व्यवस्थापक कंसोल पर मुझे निम्न मिलता है;

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">0</int> 
    <lst name="params"> 
     <str name="q">stuff</str> 
     <str name="start">0</str> 
     <str name="indent">on</str> 
     <str name="explainOther"/> 
     <str name="wt">standard</str> 
     <str name="hl.fl"/> 
     <str name="fq"/> 
     <str name="version">2.2</str> 
     <str name="qt">standard</str> 
     <str name="debugQuery">on</str> 
     <str name="fl">*,score</str> 
     <str name="rows">1</str> 
    </lst> 
    </lst> 
    <result name="response" numFound="79" start="0" maxScore="4.050907"> 
    <doc> 
     <float name="score">4.050907</float> 
     ..other bits of data 
    </doc> 
    </result> 
    <lst name="debug"> 
    <str name="rawquerystring">stuff</str> 
    <str name="querystring">stuff</str> 
    <str name="parsedquery">MYSEARCHFIELD:stuff</str> 
    <str name="parsedquery_toString">MYSEARCHFIELD:stuff</str> 
    <lst name="explain"> 
     <str name="6095">  <--- 6095 is the ID of the document 
     4.050907 = (MATCH) fieldWeight(MYSEARCHFIELD:stuff in 1292), product of: 
     1.4142135 = tf(termFreq(MYSEARCHFIELD:stuff)=2) 
     9.166156 = idf(docFreq=79, maxDocs=281583) 
     0.3125 = fieldNorm(field=MYSEARCHFIELD, doc=1292) 
     </str> 
    </lst> 

    ..timing stuff here 

    </lst> 
</response> 
+0

जैसा कि मेरे अपने उत्तर में बताया गया है कि आईडी गलत थे (पढ़ें: अस्तित्वहीन नहीं)। हालांकि, अगर मैंने स्वयं को समस्या का पता लगाने से पहले अपना जवाब पढ़ा था तो मैंने इसे डीबग क्वेरी कंसोल से देखा होगा क्योंकि मुझे लगता है कि समझाऊ आउटपुट में आपकी पोस्ट में नाम/आईडी-एट्रिब्यूट नहीं था । तो यह पोस्ट करके कि आपने मेरी समस्या भी हल की है :) – Timo

1

फ़ील्ड सूची में विशेष [व्याख्या] फ़ील्ड (स्क्वायर ब्रैकेट के साथ) में गुजरकर आप दस्तावेज़ में फ़ील्ड के रूप में समझाया जा सकता है।

संबंधित मुद्दे