lucene基础

1.保存索引 

  public static void save(Document doc){
      IndexWriter indexWriter=null;
      try {
       indexWriter=new IndexWriter(path,analyzer,MaxFieldLength.LIMITED);
       indexWriter.addDocument(doc);
  } catch (Exception e) {
   throw new RuntimeException(e);
  }finally{
   if(indexWriter!=null){
    try {
     indexWriter.close();
    } catch (CorruptIndexException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
     }

 

 

2.创建要保存的document

String title = "IndexWriter.addDocument 's javadoc";
 String content = "Adds  a document to this index. If the document contains more than setMaxFieldLength(int) terms ;

 

 Field t = new Field("content", content,Store.YES,Index.ANALYZED);
  Field c=new Field("title",title,Store.YES,Index.ANALYZED);
  Document document=new Document();
  document.add(t);
  document.add(c);
  save(document);

 

 

 

3.查询

 public static RearchResult search(String queryString) {
      QueryParser queryParse=new QueryParser("title",analyzer);
     
      IndexSearcher indexSeacrher=null;
      int totalHits=0;
      List<Document> documents=new ArrayList<Document>();
      try {
   Query query=queryParse.parse(queryString);
   indexSeacrher= new IndexSearcher(path);
   TopDocs topDocs=indexSeacrher.search(query, null, 1000);
   totalHits=topDocs.totalHits;
   ScoreDoc[] scoreDoc=topDocs.scoreDocs;
   for(ScoreDoc sdoc : scoreDoc){
    Document document=indexSeacrher.doc(sdoc.doc);
    documents.add(document);
   }
  } catch (ParseException e) {
   e.printStackTrace();
  } catch (CorruptIndexException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
      return new RearchResult(totalHits,documents);
     }

 

 

 

 

 

4.更新索引

 public static void update(Term term,Document doc){
      IndexWriter indexWriter=null;
      // 先删除包含指定 term 的 Documents,再给doc重新建立索引
      try {
   indexWriter=new IndexWriter(path,analyzer,MaxFieldLength.LIMITED);
   indexWriter.updateDocument(term, doc);
  } catch (CorruptIndexException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (LockObtainFailedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   if(indexWriter!=null){
    try {
     indexWriter.close();
    } catch (CorruptIndexException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
     
     
     }

 

 

5.高亮

package cn.itcast.lucene;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import cn.itcast.lucene.RearchResult;

 

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.junit.Test;

 

public class HightLight {
  private static Analyzer analyzer=new StandardAnalyzer();
    static String dir="c:/index/";
 
    @Test
 public static RearchResult search(Query query, int firstResult, int maxResults) {
  IndexSearcher indexSearcher = null;
  try {
   indexSearcher = new IndexSearcher(dir);

   TopDocs topDocs = indexSearcher.search(query, null, firstResult + maxResults);
   List<Document> docs = new ArrayList<Document>();

   // <b> </b>
   Formatter formatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
   Scorer scorer = new QueryScorer(query);
   Highlighter highlighter = new Highlighter(formatter, scorer);

   Fragmenter fragmenter = new SimpleFragmenter(50);
   highlighter.setTextFragmenter(fragmenter);

   int end = Math.min(firstResult + maxResults, topDocs.totalHits);
   for (int i = firstResult; i < end; i++) {
    ScoreDoc scoreDoc = topDocs.scoreDocs[i];
    Document doc = indexSearcher.doc(scoreDoc.doc);

    // 如果这个field中没有出现搜索的关键字,则返回null
    String ht = highlighter.getBestFragment(analyzer, "content", doc.get("content"));
    if (ht == null) {
     String value = doc.get("content");
     ht = value.length() > 50 ? value.substring(0, 50) : value;
    }
    doc.getField("content").setValue(ht);

    docs.add(doc);
   }

   return new RearchResult(topDocs.totalHits, docs);
  } catch (Exception e) {
   throw new RuntimeException(e);
  } finally {
   try {
    indexSearcher.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
   
   public static void main(String[] args) {
  Term term=new Term("content","document");
  Query query=new TermQuery(term);
  RearchResult result=search(query,0,11);
  for(Document doc : result.getDocuments()){
   System.out.println(doc);
  }
  }
}

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值