2013-06-09 1 views
0

Lucene 사용 4.3.0Lucene 4.3을 사용하여 현재 문서와 같은 더 많은 문서를 얻는 방법은 무엇입니까?

Lucene의 새로운 기능. 현재 선택한 문서와 같은 더 많은 문서를 가져오고 싶습니다. 내 연구에서, 이전 버전의 Lucene은 MoreLikeThis (내가 원한 것과 비슷한 동작)를 가졌습니다.

옵션을 테스트하기 위해 장난감 코드를 조합했습니다. 인덱싱이 완료되었으며 TermVector가 인덱싱에 포함됩니다.

코드 Exceprt는

QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "body", this.analyzer); 
Query query = null ; 
try { 
    query = parser.parse(searchterm); 
    ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs; 
    simpleresult = simpleresult + "HITS = " + hits.length + "\n"; 
    IndexReader ir = isearcher.getIndexReader() ; //2013-06-09 testing 
    simpleresult = simpleresult + "Total Indexed Num Docs = " + ir.numDocs() + "\n" ; 

    //Loop through results and construct simple string representation 
    for (int i = 0; i < hits.length; i++) { 
     Document hitdoc = isearcher.doc(hits[i].doc); 
     float docscore = hits[i].score ; 

     simpleresult = simpleresult + "=======" + (i+1) + "=======\n" ; 
     simpleresult = simpleresult + "DOCDBID: " + hitdoc.get("dbid") + "\n" ; 
     simpleresult = simpleresult + "Score: " + docscore + "\n" ; 

     simpleresult = simpleresult + "File: " + hitdoc.get("filename") + "\n" ; 
     simpleresult = simpleresult + hitdoc.get("body") ; 
     simpleresult = simpleresult + "\n--------META--------\n" ; 
     simpleresult = simpleresult + hitdoc.get("meta") ; 
     simpleresult = simpleresult + "==============\n" ; 

     //TESTING 2013-06-09 
     //Trying to mimic similar documents 
     //Feed the text contents of the current document back into nother query????? 
     query = parser.parse(hitdoc.get("body")); 
     ScoreDoc[] simhits = isearcher.search(query, null, 1000).scoreDocs; 
     TopDocs top = isearcher.search(query, 10); 
     simpleresult = simpleresult + "Similar Hits = " + simhits.length + "\n"; 
     simpleresult = simpleresult + "Top Hits MaxScore= " + top.getMaxScore() + "\n"; //why does this score differ from the above scores??????? 
     simpleresult = simpleresult + "Top Hits = " + top.totalHits + "\n"; 

     } 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

this.close() ; 

는 다시, 이것은 내가 더 나은 루씬을 배울 수있는 장난감 예에서 발췌 한 것입니다. 기본적으로 간단한 쿼리를 수행하고 각 결과를 GUI에 표시 한 다음 각 문서를 사용하여 다시 쿼리하여 MoreLikeThis와 유사한 유사한 문서를 봅니다. 제가하려는 것은 문서와 비슷한 문서를 얻는 것입니다. I

Lucene 4+에서 이것을 수행하는 적절한 방법이 있습니까?

답변

1

MoreLikeThis입니다. 그것은 lucene-queries 항아리에 있습니다. 사용하기에 충분히 간단해야한다고 생각합니다.

MoreLikeThis mlt = MoreLikeThis(ir); 
Query likeQuery = mlt.like(hits[i].doc); 
TopDocs results = isearcher.search(likeQuery); 
//etc 
+0

고맙습니다. 새로운 위치가 핵심이었습니다 (Lucene 4.0 이전, 위치는 유사성이었습니다). 샘플 코드를 편집해야했습니다 (샘플이 매우 유용했습니다). TopDocs 결과 = isearcher.search (likeQuery, 10)를 사용해야했습니다. // 여기서 10은 검색 메소드 서명과 일치하도록 반환 할 문서 수입니다. – SaB

관련 문제