2010-09-29 25 views
5

Tôi đang tìm kiếm một chỉ mục Solr với SolrJ và cố gắng để có được lời giải thích Lucene để đăng nhập nó để sử dụng thêm.Làm thế nào để có được giải thích Lucene cho một SolrDocument với Solrj?

Mã này đi như thế này:

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(); 
    } 

I figured rằng response.getEplainMap() sẽ chứa một bản đồ với giá trị như response.getEplainMap() nhận được (id), nhưng có vẻ như rằng explainmap. chỉ chứa null chính với giá trị của tài liệu được tìm thấy gần đây nhất.

Bất kỳ ý tưởng nào về cách giải thích đúng?

Trả lời

6

Trong trường hợp của tôi, có lỗi trong chỉ mục Solr. Mã dưới đây hoạt động ngay bây giờ.

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

Khi tạo chỉ mục và gặp sự cố như trên đảm bảo rằng trường id được xác định trong schema.xml (ví dụ: <uniqueKey>id</uniqueKey>) chứa dữ liệu chính xác. Trong trường hợp của tôi, trường id tôi đã sử dụng trong mã không giống như Solr nghĩ nó và nó không chứa dữ liệu, do đó, sơ đồ giải thích chỉ có một trường có một khóa rỗng.

1

Bạn đã thử gỡ lỗi truy vấn từ bảng điều khiển quản trị chưa? Điều này cho bạn thấy đầu ra đầy đủ.

QueryResponse có một vài phương pháp getDebugMap()getExplainMap() có thể hữu ích. Tôi đã không thử nghiệm nó trong mã nhưng trên giao diện điều khiển quản trị khi tôi gỡ lỗi một truy vấn tôi nhận được sau đây;

<?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

Như đã đề cập trong câu trả lời của riêng tôi, các id đã sai (đọc: không tồn tại). Tuy nhiên, nếu tôi đã đọc câu trả lời của bạn trước khi tôi phát hiện ra vấn đề của bản thân mình, tôi đã thấy nó từ bảng điều khiển truy vấn gỡ rối vì tôi tin rằng đầu ra giải nghĩa không có tên/id-thuộc tính giống như trong bài đăng của bạn . Vì vậy, trong một cách bằng cách gửi bài mà bạn giải quyết vấn đề của tôi quá :) – Timo

1

Bạn cũng có thể nhận thông tin giải thích dưới dạng trường trong tài liệu bằng cách chuyển vào trường [giải thích] đặc biệt (có dấu ngoặc vuông) trong danh sách trường.

Các vấn đề liên quan