2012-05-15 63 views
0

擁有一個已經索引的文檔,在搜索時,我必須將該文檔分爲兩部分:第一部分包含前100個單詞(標記),其餘部分表示第二部分。我必須得到這樣兩個部分:第二部分70%第一個30%lucene自定義得分

編輯2:所以我試圖創建一個使用SpanPositionRangeQuery搜索者,但我一定已經明白SpanQuery使用都錯了,因爲我不能得到任何命中(我用lukeall來驗證的話我正在尋找被收錄)。有人能幫我一把嗎?

public static void search(String indexDir, String q) throws Exception 
{ 

    Directory dir = FSDirectory.open(new File(indexDir), null); 
    IndexSearcher is = new IndexSearcher(dir); 

    Term term = new Term("Field", q); 
    SpanPositionRangeQuery spanQuery = new SpanPositionRangeQuery(new SpanTermQuery(term), 0, 100); 
    spanQuery.setBoost(0.3f);CustomRomanianAnalyzer(Version.LUCENE_35)); 

    long start = System.currentTimeMillis(); 
    TopDocs hits = is.search(spanQuery, 10); 
    //TopDocs hits = is.search(query, 10); 
    long end = System.currentTimeMillis(); 

    System.err.println("I found " + hits.totalHits + " documents (in " + 
      (end - start) + " milliseconds) '" + 
      q + "':"); 

    for (int i=0;i<hits.scoreDocs.length;i++) 
    { 
     ScoreDoc scoreDoc = hits.scoreDocs[i]; 
     Document doc = is.doc(scoreDoc.doc); 
     System.out.println(doc.get("filename")); 
    } 

    is.close(); 
} 

我不知道如何查詢分析器與SpanPositionRangeQuery相結合,會得到什麼,我需要......

回答

1

是的,這可以通過設置在每個BooleanQuery條款升壓完成。使用單獨的字段將起作用,但並非絕對必要。 Lucene有一個SpanPositionRangeQuery適合搜索文檔的一部分。

<SpanPositionRangeQuery: spanPosRange(field:term, 0, 100)^0.3> 
+0

我試圖這樣做,但我不知道如何鏈接查詢與解析器。我用我試過的代碼編輯了我的問題。 – MRM