我是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);
}
}
答案 0 :(得分:0)
您获得零点击的原因是您索引信息的方式和查询方式不同。
当您为信息编制索引时,使用内部使用StandardAnalyzer
的{{1}},并且所有数据都在索引中小写。
在查询时,构建“原始”查询(使用LowerCaseFilter
),这不会降低您的术语值。如果你改变行
TermQuery
到
Term t = new Term("content", "Alan");
你会得到理想的结果。显然,这是一种糟糕的方法 - 您希望通过解析查询并重用相同的分析器来实现相同的目标,例如:
Term t = new Term("content", "alan");
你可以使用不同类型的查询,但你明白了。
P.S。下次不要包含与问题无关的信息(PDF内容)。