最近在做关于大数据量查询,发现Lucene是个不错的选择。关于Luncene3.5的代码在网上不是很多,参考网上一些代码并看API,做出如下代码,有什么问题,给留言。
1.数据库作为数据源,创建索引:
-
- ublic void createIndex(OpenMode openMode,List<Authors> list){
- try {
- IndexWriter indexWriter=null;
- try {
- indexWriter=new LTes ().createIndexWriter(openMode);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- for(Authors au:list){
- Document doc=new Document();
- doc.add(new Field("id",au.getId()+"",Field.Store.YES,Field.Index.ANALYZED));
- doc.add(new Field("authorName",au.getAuthorName(),Field.Store.YES,Field.Index.ANALYZED));
- doc.add(new Field("authorID",au.getAuthorID(),Field.Store.YES,Field.Index.NO));
- doc.add(new Field("phone",au.getPhone(),Field.Store.YES,Field.Index.NO));
- doc.add(new Field("Address",au.getAddress() ,Field.Store.YES,Field.Index.NO));
- doc.add(new Field("City",au.getAuthorID(),Field.Store.YES,Field.Index.NO));
- doc.add(new Field("status",au.getPhone(),Field.Store.YES,Field.Index.NO));
- doc.add(new Field("zip",au.getPhone(),Field.Store.YES,Field.Index.NO));
-
- if (indexWriter.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE)
- {
- logger.info("OpenModel:CREATE");
- indexWriter.addDocument(doc);
- }
- else
- {
- logger.info("OpenModel:APPEND");
- indexWriter.updateDocument(new Term("id",String.valueOf(au.getId())), doc);
- }
- }
- indexWriter.close();
- } catch (CorruptIndexException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
提示: indexWriter.updateDocument(new Term("id","123"), doc);
表示更新ID为123的索引,如果没有则新增。
-
-
-
-
- public IndexWriter createIndexWriter(OpenMode openMode)throws Exception{
-
-
- Directory dir = FSDirectory.open(new File("E:\\index"));
-
- IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,
- new StandardAnalyzer(Version.LUCENE_35));
- iwc.setOpenMode(openMode);
- IndexWriter writer = new IndexWriter(dir, iwc);
- return writer;
- }
2.检索数据:
- public List<Authors> search(String queryString) throws Exception{
- String[] queryFields={"authorName"};
- List<Authors> list=new ArrayList<Authors>();
- IndexReader reader=IndexReader.open(FSDirectory.open(new File("E:\\index")));
- IndexSearcher searcher=new IndexSearcher(reader);
- QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_35, queryFields,new StandardAnalyzer(Version.LUCENE_35));
- Query query = parser.parse(queryString);
- TopDocs results = searcher.search(query,null,1000);
- ScoreDoc[] hits=results.scoreDocs;
- for(ScoreDoc sd:hits){
- int docID=sd.doc;
- Document doc=searcher.doc(docID);
- Authors authors=new Authors();
- authors.setId(Integer.valueOf(doc.get("id")));
- authors.setAddress(doc.get("Address"));
- authors.setAuthorID(doc.get("authorID"));
- authors.setAuthorName(doc.get("authorName"));
- authors.setCity(doc.get("city"));
- authors.setPhone(doc.get("phone"));
- authors.setStatus(doc.get("status"));
- authors.setZip(doc.get("zip"));
- list.add(authors);
- }
- return list;
-
- }