该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-22
langhua9527 写道 好贴
楼主能不能介绍一下分页的方法 我用的是Lucene2.4 我的程序里面是这样分页的,这样分页的坏处就是,比如说有10000条记录被查出来了,要看9000多条的时候 ScoreDoc[] hits对象就要装9000多条记录,然后再去取相应的Document //创建Query,QueryParser对象,根据Field建立的索引的KEY来搜,并设置要搜的内容 Query query = null; try { query = new QueryParser("description",new ChineseAnalyzer()).parse(keyword); } catch (ParseException e) { e.printStackTrace(); return; } //默认查询出来的数量 int maxFind = 50; //offset表示分页的从多少条开始 if(offset >= 30){ maxFind = maxFind + offset; } TopDocCollector collector = new TopDocCollector(maxFind); //查找 indexSearch.search(query,collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; int max = offset+10; if(offset+10>hits.length){ max = hits.length; } for(int i=offset;i<max;++i) { //找到这个Document原来的索引值 int docId = hits[i].doc; //根据这个值找到对象的Document Document d = indexSearch.doc(docId); Article article = new Article(); article.setId(d.get("id")); article.setTitle(Article.addHightlights(d.get("title"), keyword)); article.setCountent(Article.addHightlights(d.get("des"), keyword)); list.add(article); } 还有一个问题就是加高亮,这个怎么办啊,我都是自己写的方法来加的,这个Lucene里面非核心包有的,怎么用啊,能分享一下不 还有,我在官方看到了 http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc//contrib-analyzers/org/apache/lucene/analysis/cn/package-summary.html 还有这样一个类 SmartChineseAnalyzer 介绍还是比较强大的 比如说: ChineseAnalyzer: 我-是-中-国-人 CJKAnalyzer: 我是-是中-中国-国人 SmartChineseAnalyzer: 我-是-中国-人 我一直没有下到这个JAR。。。。。你能帮一下不。。。谢谢了,非常感谢 1.关于翻页,你可以使用HitCollect用它来帮你收集制定页码内的记录id. 2.加亮问题可以用自己写的,也可以使用lucene自带的,请参考je-analyzer中关于加亮关键字部分http://phantom.iteye.com/blog/66068 3.分词算法总的分为语义分词、词典分词、机械分词,目前还流行一些按汉字单字字频为基础的分词技术,只能说他们适用于不同领域,很难绝对的说那种就好,那种不好的。试过才知道,哪个更适合。 |
|
返回顶楼 | |
发表时间:2009-07-22
试用了一下...感觉还没有version2好用...
例如: String text="伊藤洋华堂总府店"; StringReader reader = new StringReader(text); TokenStream ts = analyzer.tokenStream(text, reader); Token t = ts.next(new Token()); List<String> list = new ArrayList<String>(); while (t != null) { System.out.println(t.term()+" --------"); // if(t.term().length()==str.length()){ // list.clear(); // list.add(t.term()); // return list; // } t = ts.next(new Token()); } 输出全是一个字 (伊,藤,洋,华,堂,总,府,店) 而第二版输出是 [伊藤洋华堂总府店, 伊藤, 藤洋, 洋华, 华堂, 堂总, 总府, 府店] 请问version3有没有未知词汇二元分词 还有似乎没有以前的MIK_CAnalyzer()了..! 似乎version3扩展性前了很多. 可以自己配置词典了! 赞一个!..楼主真无私!! |
|
返回顶楼 | |
发表时间:2009-07-22
ziyu_1 写道 能不能有个人做个测试,测试没种中分词器的性能,看看谁的最好.
IK宣称每秒能到50W,庖丁似乎是每秒20W,差不少. 希望有个中间人做个对比测试 哈哈,本想把IK的性能提升到750000字/s左右,方法已经找到了。不过项目组的组员说,有必要嘛?目的是为啥?想想也是。分词还是以结果为主的,个人感觉效率达到10万字/秒的分词器,基本上就没有差别了。目前je ,paoding和早期的IK都能达到这个水准。 |
|
返回顶楼 | |
发表时间:2009-07-22
fc6029585 写道 试用了一下...感觉还没有version2好用...
例如: String text="伊藤洋华堂总府店"; StringReader reader = new StringReader(text); TokenStream ts = analyzer.tokenStream(text, reader); Token t = ts.next(new Token()); List<String> list = new ArrayList<String>(); while (t != null) { System.out.println(t.term()+" --------"); // if(t.term().length()==str.length()){ // list.clear(); // list.add(t.term()); // return list; // } t = ts.next(new Token()); } 输出全是一个字 (伊,藤,洋,华,堂,总,府,店) 而第二版输出是 [伊藤洋华堂总府店, 伊藤, 藤洋, 洋华, 华堂, 堂总, 总府, 府店] 请问version3有没有未知词汇二元分词 还有似乎没有以前的MIK_CAnalyzer()了..! 似乎version3扩展性前了很多. 可以自己配置词典了! 赞一个!..楼主真无私!! 3.0确实取消了2元分词,因为对未知词使用2元切分,在召回率上存在一些问题。新的切分算法配合IKQueryParser是能达到很好的搜索效果的,试试看! |
|
返回顶楼 | |
发表时间:2009-07-22
linliangyi2007 写道 fc6029585 写道 试用了一下...感觉还没有version2好用...
例如: String text="伊藤洋华堂总府店"; StringReader reader = new StringReader(text); TokenStream ts = analyzer.tokenStream(text, reader); Token t = ts.next(new Token()); List<String> list = new ArrayList<String>(); while (t != null) { System.out.println(t.term()+" --------"); // if(t.term().length()==str.length()){ // list.clear(); // list.add(t.term()); // return list; // } t = ts.next(new Token()); } 输出全是一个字 (伊,藤,洋,华,堂,总,府,店) 而第二版输出是 [伊藤洋华堂总府店, 伊藤, 藤洋, 洋华, 华堂, 堂总, 总府, 府店] 请问version3有没有未知词汇二元分词 还有似乎没有以前的MIK_CAnalyzer()了..! 似乎version3扩展性前了很多. 可以自己配置词典了! 赞一个!..楼主真无私!! 3.0确实取消了2元分词,因为对未知词使用2元切分,在召回率上存在一些问题。新的切分算法配合IKQueryParser是能达到很好的搜索效果的,试试看! 可惜现在有很多的应用并不需要lucene |
|
返回顶楼 | |
发表时间:2009-07-22
最后修改:2009-07-22
再问两个问题:
1.楼主能介绍一下怎么去删除和更新索引吗? 2.比如说,发表一篇文章,我在发表的时候我就去建立索引。。。 这样用Lucene马上就可以搜索到,但是也可以定时建立索引。。 这两种方法那种好一些? |
|
返回顶楼 | |
发表时间:2009-07-22
以前用过很多的分词器,还是ik 比较好。希望ik 越来越强。
|
|
返回顶楼 | |
发表时间:2009-07-22
langhua9527 写道 再问两个问题:
1.楼主能介绍一下怎么去删除和更新索引吗? 2.比如说,发表一篇文章,我在发表的时候我就去建立索引。。。 这样用Lucene马上就可以搜索到,但是也可以定时建立索引。。 这两种方法那种好一些? 实时索引对lucene而言不是太好的方式,因为有并发锁问题和索引的效率问题。 如果更新频度大的话,可以设定每5分钟索引一次。如果遇到没有记录索引时,做一个算法来延长定时索引的时间。 在频繁建索引后,一定记得固定时间要优化索引,比如每天的凌晨1点。 |
|
返回顶楼 | |
发表时间:2009-07-22
lz刚下了IKAnalyzer3[1].0GA_AllInOne_.rar 包解压
运用到 你写的lucene入门实例中 报 error:(25,33)无法访问 org.wltea.analyzer.lucene.IKAnalyzer 错误的类文件:F://gquery\web\WEBINF\lib\IKAnalyzer3.0OGA.jar(org/wltea/analyzer/lucene/IKAnalyzer.class) 类文件具有错误的版本 50.0,应为 49.0 请删除该文件或确保该文件位于正确的类路径子目录中 |
|
返回顶楼 | |
发表时间:2009-07-22
cs_sehu 写道 lz刚下了IKAnalyzer3[1].0GA_AllInOne_.rar 包解压
运用到 你写的lucene入门实例中 报 error:(25,33)无法访问 org.wltea.analyzer.lucene.IKAnalyzer 错误的类文件:F://gquery\web\WEBINF\lib\IKAnalyzer3.0OGA.jar(org/wltea/analyzer/lucene/IKAnalyzer.class) 类文件具有错误的版本 50.0,应为 49.0 请删除该文件或确保该文件位于正确的类路径子目录中 你的jdk版本太低了吧,用6.0的试试 |
|
返回顶楼 | |