Lucene中文分词的高亮[highlight]显示
2009-05-13 02:47:57来源:未知 阅读 ()
1、问题的来源 增加分词以后结果的准确度提高了,但是用户反映返回结果的速度很慢。原因是, Lucene 做每一篇文档的相关关键词的高亮显示时,在运行时执行了很多遍的分词操作。这样降低了性能。
2 、解决方法
??
??在 Lucene1.4.3 版本中的一个新功能可以解决这个问题。 Term Vector 现在支持保存 Token.getPositionIncrement() 和 Token.startOffset() 以及 Token.endOffset() 信息。利用 Lucene 中新增加的 Token 信息的保存结果以后,就不需要为了高亮显示而在运行时解析每篇文档。通过 Field 方法控制是否保存该信息。修改 HighlighterTest.java 的代码如下:
?
程序代码:
// 增加文档时保存 Term 位置信息。
?private void addDoc(IndexWriter writer, String text) throws IOException
?{
??document.nbsp;d = new document.);
??//Field f = new Field(FIELD_NAME, text, true, true, true);
??Field f = new Field(FIELD_NAME, text ,
??Field.Store.YES, Field.Index.TOKENIZED,
??Field.TermVector.WITH_POSITIONS_OFFSETS);
??d.add(f);
??writer.adddocument.d);
}
??// 利用 Term 位置信息节省 Highlight 时间。
??void doStandardHighlights() throws Exception
??{
? Highlighter highlighter =new Highlighter(this,new QueryScorer(query));
??highlighter.setTextFragmenter(new SimpleFragmenter(20));
??for (int i = 0; i int maxNumFragmentsRequired = 2;
??String fragmentSeparator = "...";
??TermPositionVector tpv = (TermPositionVector)reader.getTermFreqVector(hits.id(i),FIELD_NAME);
?// 如果没有 stop words 去除还可以改成 TokenSources.getTokenStream(tpv,true); 进一步提速。
? TokenStream tokenStream=TokenSources.getTokenStream(tpv);
? //analyzer.tokenStream(FIELD_NAME,new StringReader(text));
? String result =
? highlighter.getBestFragments(
? tokenStream,
? text,
? maxNumFragmentsRequired,
fragmentSeparator);
? System.out.println(" " + result);
?}
}
最后把 highlight 包中的一个额外的判断去掉。对于中文来说没有明显的单词界限,所以下面这个判断是错误的: ??
??
程序代码:
tokenGroup.isDistinct(token) ??
??这样中文分词就不会影响到查询速度了。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15511/showart_104425.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 我喜欢的桌面主题 2009-05-13
- 选择FreeBSD的中文编码 2009-05-13
- OpenBSD FAQ 中文版(非官方) 2009-05-13
- OpenBSD 4.5 2009-05-13
- xetex 中文问题 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash