lucene学习---高亮显示
2006-09-02 11:14
417 查看
package src;
import java.io.StringReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
public class LuceneSearch {
public static void main(String[] args) throws Exception{
LuceneSearch test = new LuceneSearch();
//
Hits h = null;
h = test.search("显示 ");
test.printResult(h);
h = test.search("jy*");
test.printResult(h);
h = test.search("djy");
test.printResult(h);
}
public LuceneSearch(){
try{
searcher = new IndexSearcher(IndexReader.open("E://lucene//test4//index"));
}catch(Exception e){
e.printStackTrace();
}
}
//声明一个IndexSearcher对象
private IndexSearcher searcher = null;
//声明一个Query对象
private Query query = null;
ChineseAnalyzer analyzer = new ChineseAnalyzer();
Highlighter highlighter = null;
public final Hits search(String keyword){
System.out.println("正在检索关键字:"+keyword);
try{
QueryParser qp = new QueryParser("title",analyzer);
query = qp.parse(keyword);
Term term = new Term("content",keyword);
FuzzyQuery fq = new FuzzyQuery(term);
Date start = new Date();
//Hits hits = searcher.search(query);
Hits hits = searcher.search(query);
//高亮显示设置
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>","</read>");
highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(10));//这个100是指定关键字字符串的context的长度,你可以自己设定,因为不可能返回整篇正文内容
Date end = new Date();
System.out.println("检索完成,用时"+(end.getTime()-start.getTime())+"毫秒");
return hits;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public void printResult(Hits h){
if(h.length() == 0){
System.out.println("对不起,没有找到您要的结果.");
}else{
for(int i = 0; i < h.length(); i++){
try{
Document doc = h.doc(i);
System.out.println("这个是"+(i+1)+"个结果:"+doc.get("id")+" title:"+doc.get("title")+" content:"+doc.get("content"));
//高亮出显示
TokenStream tokenStream =analyzer.tokenStream("content", new StringReader(doc.get("title")));
System.out.println(highlighter.getBestFragment(tokenStream,h.doc(i).get("title")));
//System.out.println(doc.get("path"));
}catch(Exception e){
e.printStackTrace();
}
}
}
System.out.println("--------------------------------------");
}
}
import java.io.StringReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
public class LuceneSearch {
public static void main(String[] args) throws Exception{
LuceneSearch test = new LuceneSearch();
//
Hits h = null;
h = test.search("显示 ");
test.printResult(h);
h = test.search("jy*");
test.printResult(h);
h = test.search("djy");
test.printResult(h);
}
public LuceneSearch(){
try{
searcher = new IndexSearcher(IndexReader.open("E://lucene//test4//index"));
}catch(Exception e){
e.printStackTrace();
}
}
//声明一个IndexSearcher对象
private IndexSearcher searcher = null;
//声明一个Query对象
private Query query = null;
ChineseAnalyzer analyzer = new ChineseAnalyzer();
Highlighter highlighter = null;
public final Hits search(String keyword){
System.out.println("正在检索关键字:"+keyword);
try{
QueryParser qp = new QueryParser("title",analyzer);
query = qp.parse(keyword);
Term term = new Term("content",keyword);
FuzzyQuery fq = new FuzzyQuery(term);
Date start = new Date();
//Hits hits = searcher.search(query);
Hits hits = searcher.search(query);
//高亮显示设置
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>","</read>");
highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(10));//这个100是指定关键字字符串的context的长度,你可以自己设定,因为不可能返回整篇正文内容
Date end = new Date();
System.out.println("检索完成,用时"+(end.getTime()-start.getTime())+"毫秒");
return hits;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public void printResult(Hits h){
if(h.length() == 0){
System.out.println("对不起,没有找到您要的结果.");
}else{
for(int i = 0; i < h.length(); i++){
try{
Document doc = h.doc(i);
System.out.println("这个是"+(i+1)+"个结果:"+doc.get("id")+" title:"+doc.get("title")+" content:"+doc.get("content"));
//高亮出显示
TokenStream tokenStream =analyzer.tokenStream("content", new StringReader(doc.get("title")));
System.out.println(highlighter.getBestFragment(tokenStream,h.doc(i).get("title")));
//System.out.println(doc.get("path"));
}catch(Exception e){
e.printStackTrace();
}
}
}
System.out.println("--------------------------------------");
}
}
相关文章推荐
- lucene学习之简单的高亮显示
- 搜索学习入门--使用LuceneHighlighter高亮显示Lucene检索结果的关键词
- 【lucene系列学习二】Lucene实现高亮显示关键词
- lucene学习--分词和高亮显示
- 一步一步跟我学习lucene(11)---lucene搜索之高亮显示highlighter
- Lucene学习之高亮显示
- Lucene学习一:入门级Demo,创建索引和查询高亮显示
- lucene学习--分词和高亮显示
- Lucene 3.6.2关键词高亮显示实现例子
- 【Lucene】三个高亮显示模块的简单示例-Highlighter
- JavaScript学习——表格的隔行换色+高亮显示
- 转 lucene3搜索引擎,索引建立搜索排序分页高亮显示, IKAnalyzer分词
- lucene 高亮显示
- 10.solr学习速成之高亮显示
- 【Lucene】使用EasyUI和JQuery配合Lucene实现数据的分页查询以及高亮显示
- Lucene highlighter高亮显示
- lucene之中文分词及其高亮显示
- 11、学习Lucene3.5索引搜索之分页显示
- asp.net中利用Lucene.net实现检索并对检索关键字高亮显示
- 使用Lucene的highlight包高亮显示检索关键字