有哪位能指导一下我这个菜鸟?
我是一个用lucene写程序的新手,我的代码如下,现在的问题是查不出东西来,不知道是什么问题,请能者帮之,谢谢!
package com.edu.ccut.bookstore.searcher.webtier;import com.edu.ccut.bookstore.searcher.persistence.luceneDao;
import com.edu.ccut.bookstore.searcher.service.LuceneManagerFacade;
import com.edu.ccut.bookstore.domain.Book;
import com.edu.ccut.bookstore.domain.UserInfo;import java.util.List;
import java.io.*;import org.apache.lucene.document.Field;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.search.*;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.util.Version;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.validation.BindException;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Testlucene extends AbstractCommandController { public Testlucene() {
setCommandClass(UserInfo.class);
} private luceneDao lucenedao; public luceneDao getLuceneDao() {
return lucenedao;
} public void setLucenedao(luceneDao lucenedao) {
this.lucenedao = lucenedao;
} public Analyzer getAnalyzer() {
return new StandardAnalyzer(Version.LUCENE_CURRENT);
} private LuceneManagerFacade luceneManagerFacade; public void setLuceneManagerFacade(LuceneManagerFacade luceneManagerFacade) {
this.luceneManagerFacade = luceneManagerFacade;
} protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
Object command, BindException e) throws Exception { List Books = lucenedao.findAllBookInfo();
int size = Books.size();
File dir = new File("c:/index/"); String[] keyword = {request.getParameter("keyword")};
IndexWriter writer = new IndexWriter(FSDirectory.open(dir), getAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
Directory ramdirectory = new RAMDirectory();
IndexWriter RAMWriter = new IndexWriter(ramdirectory, new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.UNLIMITED); for (int i = 0; i < size; i++) {
Book book;
book = (Book) Books.get(i);
Document doc = new Document();
doc.add(new Field("isbn", book.getIsbn(), Field.Store.YES, Field.Index.ANALYZED)); RAMWriter.addDocument(doc); }
RAMWriter.close();
writer.addIndexesNoOptimize(new Directory[]{ramdirectory});
writer.close(); IndexReader reader = IndexReader.open(FSDirectory.open(dir), true);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); //词法分析器
String[] fields = {"isbn"};//索引中的字段 Query query = MultiFieldQueryParser.parse(Version.LUCENE_CURRENT, keyword, fields, analyzer);//索引对应字段和关键字进行匹配
TopScoreDocCollector collector = TopScoreDocCollector.create(100, true);
IndexSearcher is = new IndexSearcher(FSDirectory.open(dir), true);
is.search(query, collector);
ScoreDoc[] docs = collector.topDocs().scoreDocs;
for (int i = 0; i < docs.length; i++) {
Document doc = is.doc(docs[i].doc);// new method is.doc()
System.out.println(doc.getField("isbn") + "" + docs[i].toString() + "");
}
reader.close();
request.getSession().setAttribute("doc", docs);
return new ModelAndView("searchResult", "ids", docs); }
}
我是一个用lucene写程序的新手,我的代码如下,现在的问题是查不出东西来,不知道是什么问题,请能者帮之,谢谢!
package com.edu.ccut.bookstore.searcher.webtier;import com.edu.ccut.bookstore.searcher.persistence.luceneDao;
import com.edu.ccut.bookstore.searcher.service.LuceneManagerFacade;
import com.edu.ccut.bookstore.domain.Book;
import com.edu.ccut.bookstore.domain.UserInfo;import java.util.List;
import java.io.*;import org.apache.lucene.document.Field;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.search.*;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.util.Version;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.validation.BindException;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Testlucene extends AbstractCommandController { public Testlucene() {
setCommandClass(UserInfo.class);
} private luceneDao lucenedao; public luceneDao getLuceneDao() {
return lucenedao;
} public void setLucenedao(luceneDao lucenedao) {
this.lucenedao = lucenedao;
} public Analyzer getAnalyzer() {
return new StandardAnalyzer(Version.LUCENE_CURRENT);
} private LuceneManagerFacade luceneManagerFacade; public void setLuceneManagerFacade(LuceneManagerFacade luceneManagerFacade) {
this.luceneManagerFacade = luceneManagerFacade;
} protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
Object command, BindException e) throws Exception { List Books = lucenedao.findAllBookInfo();
int size = Books.size();
File dir = new File("c:/index/"); String[] keyword = {request.getParameter("keyword")};
IndexWriter writer = new IndexWriter(FSDirectory.open(dir), getAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
Directory ramdirectory = new RAMDirectory();
IndexWriter RAMWriter = new IndexWriter(ramdirectory, new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.UNLIMITED); for (int i = 0; i < size; i++) {
Book book;
book = (Book) Books.get(i);
Document doc = new Document();
doc.add(new Field("isbn", book.getIsbn(), Field.Store.YES, Field.Index.ANALYZED)); RAMWriter.addDocument(doc); }
RAMWriter.close();
writer.addIndexesNoOptimize(new Directory[]{ramdirectory});
writer.close(); IndexReader reader = IndexReader.open(FSDirectory.open(dir), true);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); //词法分析器
String[] fields = {"isbn"};//索引中的字段 Query query = MultiFieldQueryParser.parse(Version.LUCENE_CURRENT, keyword, fields, analyzer);//索引对应字段和关键字进行匹配
TopScoreDocCollector collector = TopScoreDocCollector.create(100, true);
IndexSearcher is = new IndexSearcher(FSDirectory.open(dir), true);
is.search(query, collector);
ScoreDoc[] docs = collector.topDocs().scoreDocs;
for (int i = 0; i < docs.length; i++) {
Document doc = is.doc(docs[i].doc);// new method is.doc()
System.out.println(doc.getField("isbn") + "" + docs[i].toString() + "");
}
reader.close();
request.getSession().setAttribute("doc", docs);
return new ModelAndView("searchResult", "ids", docs); }
}
你用英文试下能不能找单词。中文的建议不要用这个分词器了。