首页 | 公告 | 参考资料  | 教程 | 框架/设计 | 源码/下载 | 构件产品 | MyRSS 
简易java开源论坛->新手技术交流
  版主:battle001
 版面公告:Java新手提问及技术交流区,EasyJF有专人进行解答.
搜索 文章标题: 发表人:
[回复] [精华帖] [版主管理]
 主题:按大峡的lucene使用文章步骤,终于用上了lucene.
  [引用回复]

在使用过程中注意参照lucene的例子,来理解.
程序所用的是lucene的最新版2.0.0
有少部分功能,RSS订阅,热门搜索还在继续努力中...
欢迎大家共同讨论...
 楼主:navIme2 Fri Aug 04 09:26:08 CST 2006
 
  [引用回复]

为了便于大家了解lucene,做了最简单的创建索引和,查讯两个例子,
整个工程可以导入在eclipse中,直接测试使用,用于了解lucene及学习easyjf.
内含lucene2.0.0 jar包.
相关附件下载: /bbs/upfile/doc/20060707/11522643747641157793070.rar

 发言人:navIme2 楼层:1  2006-07-07 17:26:31.857
 
  [引用回复]

有关高亮显示部分应当这样处理,以下引自http://www.blogjava.net/ognl/

到这里索引已经建立了 ,下面要做的就是搜索
public List<Document> searchDoc(String type, String queryString) {
List<Document> fileList = new ArrayList<Document>();
//其实这里是不需要的,因为lucene默认是调用它的,当然还有另外一个,我这里只是为了下面的高亮显示
Analyzer analyzer = new StandardAnalyzer();
try {
Directory fsDir = FSDirectory.getDirectory(getPathIndex(), false);
IndexSearcher searcher = new IndexSearcher(fsDir);
QueryParser queryParse = new QueryParser(type, analyzer);
Hits hits = searcher.search(queryParse.parse(queryString));
 for (int i = 0; i < hits.length(); i++) {
Document doc = hits.doc(i);
String value = doc.get(type);
//对要高亮显示的字段格式化,我这里只是加红色显示和加粗
SimpleHTMLFormatter sHtmlF = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
Highlighter highlighter = new Highlighter(sHtmlF,new QueryScorer(queryParse.parse(queryString)));
highlighter.setTextFragmenter(new SimpleFragmenter(100));
 if (value != null) {
TokenStream tokenStream = analyzer.tokenStream(type,new StringReader(value));
Field tempField = new Field(type, highlighter.getBestFragment(tokenStream, value),Field.Store.NO,
Field.Index.TOKENIZED,Field.TermVector.YES);
doc.removeField(type);
 doc.add(tempField);
 }
//这里取的是Document 对象哦,里面的东西还需要你自己抽取呵,代码我就不写了
 fileList.add(doc);
 }
 searcher.close();
 } catch (IOException e) {
e.printStackTrace();
 } catch (ParseException e) {
e.printStackTrace();
 }
 return fileList;
}


 发言人:navIme2 楼层:2  2006-07-12 11:42:45.7
 
  [引用回复]

SimpleHTMLFormatter
Highlighter
这些类是从哪个包引入的?
 发言人:大峡 楼层:3  2006-07-12 12:48:12.873
 
  [引用回复]

lucene2.0 有一个contrib目录,存放了各种功能包。就有Hightlight包。
好象需要在:
   public Hits doSearch(String key) {
       Hits hits = null;
       try {
           //ir = IndexReader.open(indexDir);
           //search = new IndexSearcher(ir);
           String fields[] = { "title", "content" };
           QueryParser parser = new MultiFieldQueryParser(fields,new StandardAnalyzer());
           Query query = parser.parse(key);
           
           
           hits = search.search(query);
       } catch (Exception e) {
           e.printStackTrace();
       }
       System.out.println("搜索结果:" + hits.length());
       return hits;
   }


中做修改,我还没看太看懂呢。
 发言人:navIme2 楼层:4  2006-07-12 13:38:04.493
 
  [引用回复]

经过测试新的lucene搜索方法更新如下:

   public Hits doSearch(String key) {
       Hits hits = null;
       try {
           //ir = IndexReader.open(indexDir);
           //search = new IndexSearcher(ir);
           String fields[] = { "title", "content" };
           QueryParser parser = new MultiFieldQueryParser(fields,new StandardAnalyzer());
           Query query = parser.parse(key);
           
           
           hits = search.search(query);
           
           for (int i = 0; i < hits.length(); i++)
           {
               Document doc = hits.doc(i);
               String text = hits.doc(i).get("content");
               
               SimpleHTMLFormatter sHtmlF = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
               Highlighter highlighter = new Highlighter(sHtmlF,new QueryScorer(parser.parse(key)));
               //highlighter.setTextFragmenter(new SimpleFragmenter(100));
               
               TokenStream tokenStream = new StandardAnalyzer().tokenStream("content", new StringReader(text));
               // Get 3 best fragments and seperate with a "..."
               String result = highlighter.getBestFragments(tokenStream, text, 3, "...");
               //System.out.println(result);
               
               Field tempField = new Field("content", result,Field.Store.NO,Field.Index.TOKENIZED,Field.TermVector.YES);
               
               doc.removeField("content");
               doc.add(tempField);
           }            
           
           
       } catch (Exception e) {
           e.printStackTrace();
       }
       System.out.println("搜索结果:" + hits.length());
       return hits;
   }
[/quote]
原来的自定义的内容处理方法:
[quote]
//取消此方法:
//public String content2intro(String content, String key){
//.
//.
//.


最新的搜索效果如下:<img src="/bbs/upfile/doc/20060712/11526882757401157793070.gif" border="0"/>


 发言人:navIme2 楼层:5  2006-07-12 15:12:07.993
 
  [引用回复]

从中可以看到针对中文的分词,呵呵,word+,
 发言人:navIme2 楼层:6  2006-07-12 15:16:14.823
 
  [引用回复]

lucene2对中文文档怎样建索引啊?
 发言人:218.5.2.219 楼层:7  2006-08-03 14:44:48.027
 
  [引用回复]

拜托了,帮帮忙呀。

lucene2对中文文档怎样建索引啊?有没有朋友能把手上的代码共享给小弟学习学习呀
 发言人:218.5.2.219 楼层:8  2006-08-04 09:26:08.823
8条回复 共1页,目前为第1 分页: 
[精华帖] [刷新]
 请在下面输入回复信息

表情图片
(加入心情图标)



内容:
相关图片: 各图片之间用逗号隔开
相关附件: 各附件之间用逗号隔开
用户名: 您还没有[ 注册]或[登录
 

Aboutus | 联系我们 | 程序开发 | 网站地图 | 留言板