Lucene 3.0 - 为什么我无法获得正确的hitcount?

时间:2011-06-24 11:00:40

标签: netbeans lucene

我是Lucene的新手,当我试图在搜索后获得一个hitcount时,我迷失了。请帮忙。 顺便说一下,我正在使用Netbeans IDE。在此先感谢您的帮助。

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pdflucene;

/**
*
* @author nigel
*/


import java.io.IOException;


import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;


public class ExtractPageContent {


public static final String inn = "/Users/nigel/Desktop/Statement_Week9/AlanWilder.pdf";
public static final String PATH = "/Users/nigel/Desktop/Statement_Week9";



public void parsePdf(String pdf) throws IOException {
     String ts="";
     String content="";
     String [] queryStrings;

 try{   
    String temp = ""; 
     PDDocument pdfdocument = PDDocument.load(pdf);   
    Integer n=pdfdocument.getNumberOfPages();
    PDFTextStripper stripper = new PDFTextStripper();  

    RAMDirectory idx = new RAMDirectory();
    stripper.setStartPage(1);
    stripper.setEndPage(4);
    stripper.setSortByPosition(false);

    pdfdocument.close();

    IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_30, new StandardAnalyzer(Version.LUCENE_30));
    IndexWriter writer = new IndexWriter(idx, conf);
    Document mydoc = new Document();
    mydoc.add(new Field("content", "Alan is Alan not quite alan",Field.Store.NO,Field.Index.ANALYZED)); 

    writer.addDocument(mydoc) ;
    writer.close();


    IndexSearcher ss=new IndexSearcher(idx,true);
    Term t = new Term("content", "Alan");
    TermQuery pq= new TermQuery(t);


    int results = ss.search(pq,1).totalHits;
    System.out.println("total hits: " + results);


    ss.close();

   System.out.println("number of pages " + n);
   }catch(Exception e){ 
      System.out.println("Something Wrong at "+e.getMessage());
    }   



}



 /**
 * Main method.
 * @param    args    no arguments needed
 * @throws IOException
 */
  public static void main(String[] args) throws IOException {
    new ExtractPageContent().parsePdf(inn);
  }
}

1 个答案:

答案 0 :(得分:0)

您获得零点击的原因是您索引信息的方式和查询方式不同。

当您为信息编制索引时,使用内部使用StandardAnalyzer的{​​{1}},并且所有数据都在索引中小写。

在查询时,构建“原始”查询(使用LowerCaseFilter),这不会降低您的术语值。如果你改变行

TermQuery

Term t = new Term("content", "Alan");

你会得到理想的结果。显然,这是一种糟糕的方法 - 您希望通过解析查询并重用相同的分析器来实现相同的目标,例如:

Term t = new Term("content", "alan");

你可以使用不同类型的查询,但你明白了。

P.S。下次不要包含与问题无关的信息(PDF内容)。