- 浏览: 1048363 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
lucene,solr,nutch,hadoop的区别和联系
apache lucene是apache下一个著名的开源搜索引擎内核,基于Java技术,处理索引,拼写检查,点击高亮和其他分析,分词等技术。
nutch和solr原来都是lucene下的子项目。但后来nutch独立成为独立项目。nutch是2004年由俄勒冈州立大学开源实验室模仿google搜索引擎创立的开源搜索引擎,后归于apache旗下。nutch主要完成抓取,提取内容等工作。
solr则是基于lucene的搜索界面。提供XML/HTTP 和 JSON/Python/Ruby API,提供搜索入口,点击高亮,缓存,备份和管理界面。
hadoop原来是nutch下的分布式任务子项目,现在也成为apache下的顶级项目。nutch可以利用hadoop进行分布式多任务抓取和分析存储工作。
所以,lucene,nutch,solr,hadoop一起工作,是能完成一个中型的搜索引擎工作的。
Lucene版本的更新还是飞快的,现在已经到4.7的版本了,今天,散仙来给大家分享几个Lucene比较有用的小技术。Lucene作为一款优秀的全文检索工具包,自然附带了一些其他比较有用的功能,例如在文本挖掘领域,常常需要统计一些词或短语的TF信息,或者IDF的信息,用来加权某个词条,从而找出某篇新闻,或文献中比较重要的一些关键词或短语,或者我们想得到这些词库的位置信息等等。
下面进入正题,今天散仙就围绕如上所说的,来看下如何利用Lucene来获取TF,IDF,以及term词条的位置信息。
首先,第一个我们来看下如何获取分词后的短语的位置信息,这个功能,主要跟我们的分词器有关系,在分词过程中记录的位置信息,增量信息,载荷等等,我们重点来看下,如何获取位置信息,代码如下:
Java代码 复制代码 收藏代码
1.测试数据
2.中新网3月12日电 据中国政府网消息,3月12日上午10时15分,李克强总理参加完政协闭幕会后来到国务院应急指挥中心,与前方中国搜救船长通话,了解马航MH370失联客机搜救最新进展情况。李克强要求各有关部门调集一切可能力量,加大搜救密度和力度,不放弃任何一线希望。
Java代码 复制代码 收藏代码
1./**
2. * 搜索技术交流群: 324714439
3. *
4. * 获取分词后term的位置信息
5. * @param word 分词的文本
6. * */
7.public void postion(String word)throws Exception{
8.
9. Analyzer analyzer=new IKAnalyzer();//IK分词
10. TokenStream token=analyzer.tokenStream("a", new StringReader(word));
11. token.reset();
12. CharTermAttribute term=token.addAttribute(CharTermAttribute.class);//term信息
13. OffsetAttribute offset=token.addAttribute(OffsetAttribute.class);//位置数据
14. while(token.incrementToken()){
15. System.out.println(term+" "+offset.startOffset()+" "+offset.endOffset());
16. }
17. token.end();
18. token.close();
19.}
Java代码 复制代码 收藏代码
1.输出结果:
2.中新网 0 3
3.中新 0 2
4.新网 1 3
5.3 3 4
6.月 4 5
7.12 5 7
8.日 7 8
9.电 8 9
10.据 10 11
11.中国政府 11 15
12.中国 11 13
13.国政 12 14
14.政府网 13 16
15.政府 13 15
16.网 15 16
17.消息 16 18
18.3 19 20
19.月 20 21
20.12 21 23
21.日 23 24
22.上午 24 26
23.10 26 28
24.时 28 29
25.15 29 31
26.分 31 32
27.李克强 33 36
28.克强 34 36
29.总理 36 38
30.参加 38 40
31.加完 39 41
32.政协 41 43
33.闭幕会 43 46
34.闭幕 43 45
35.会后 45 47
36.后来 46 48
37.来到 47 49
38.国务院 49 52
39.国务 49 51
40.院 51 52
41.应急 52 54
42.指挥中心 54 58
43.指挥 54 56
44.中心 56 58
45.与 59 60
46.前方 60 62
47.方中 61 63
48.中国 62 64
49.搜救 64 66
50.船长 66 68
51.通话 68 70
52.了解 71 73
53.马 73 74
54.航 74 75
55.mh370 75 80
56.mh 75 77
57.370 77 80
58.失 80 81
59.联 81 82
60.客机 82 84
61.搜救 84 86
62.最新进展 86 90
63.最新 86 88
64.新进展 87 90
65.新进 87 89
66.进展 88 90
67.情况 90 92
68.李克强 93 96
69.克强 94 96
70.强要 95 97
71.要求 96 98
72.各有 98 100
73.有关部门 99 103
74.有关 99 101
75.有 99 100
76.关 100 101
77.部门 101 103
78.调集 103 105
79.一切 105 107
80.切 106 107
81.可能 107 109
82.能力 108 110
83.力量 109 111
84.加大 112 114
85.搜救 114 116
86.密度 116 118
87.力度 119 121
88.不放 122 124
89.放弃 123 125
90.任何 125 127
91.一线希望 127 131
92.一线 127 129
93.线 128 129
94.希望 129 131
由上显示,我们可以获取所有短语的位置信息,这个功能在Lucene高亮的时候是非常有用的,如果数据位置发生错位,那么大部分原因都有可能跟这个地方有关系。
第二,我们来看下,如何使用Lucene来获取一片文章中所有短语的词频,这个首先我们的数据是需要索引起来的,并且要开启向量存储的功能,然后我们在去索引里面获取词频,然后,稍作加工,按词频降序输出,由此来直观显示,这篇文章可能重点体现的意思,在这之前,需要对一些常见的禁用词做下处理,以防影响数据结果。
数据和一里面的一样,代码如下:
Java代码 复制代码 收藏代码
1.存储核心代码;
2.
3.FieldType ft=new FieldType();
4. ft.setIndexed(true);//存储
5. ft.setStored(true);//索引
6. ft.setStoreTermVectors(true);
7. ft.setTokenized(true);
8. ft.setStoreTermVectorPositions(true);//存储位置
9. ft.setStoreTermVectorOffsets(true);//存储偏移量
10. Document doc=new Document();
11. doc.add(new Field("name", word, ft));
12. writer.addDocument(doc);
Java代码 复制代码 收藏代码
1. 获取TF的代码
2.
3.**
4. * 读取索引,显示词频
5. *
6. * **/
7. public void getTF(){
8.List<Word> list=new ArrayList<Word>();
9.
10. try{
11. Directory directroy=FSDirectory.open(new File("D:\\lucene测试索引\\2014311测试"));
12. IndexReader reader= DirectoryReader.open(directroy);
13. for (int i = 0; i < reader.numDocs(); i++) {
14. int docId = i;
15. System.out.println("第"+(i+1)+"篇文档:");
16. Terms terms = reader.getTermVector(docId, "name");
17. if (terms == null)
18. continue;
19. TermsEnum termsEnum = terms.iterator(null);
20. BytesRef thisTerm = null;
21. while ((thisTerm = termsEnum.next()) != null) {
22. String termText = thisTerm.utf8ToString();
23. DocsEnum docsEnum = termsEnum.docs(null, null);
24. while ((docsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
25. System.out.println("termText:"+termText+" TF: "+docsEnum.freq());
26. }
27.
28. }
29. }
30.
31. reader.close();
32. directroy.close();
33.
34. Collections.sort(list);
35.
36. for(Word w:list){
37. System.out.println(w);
38. }
39.
40.
41. }catch(Exception e){
42. e.printStackTrace();
43. }
44.
45.
46.}
输出结果如下:
Java代码 复制代码 收藏代码
1.索引成功了..........
2.第1篇文档:
3.关键词: 搜救 词频: 3
4.关键词: 12 词频: 2
5.关键词: 3 词频: 2
6.关键词: 中国 词频: 2
7.关键词: 克强 词频: 2
8.关键词: 日 词频: 2
9.关键词: 月 词频: 2
10.关键词: 李克强 词频: 2
11.关键词: 10 词频: 1
12.关键词: 15 词频: 1
13.关键词: 370 词频: 1
14.关键词: mh 词频: 1
15.关键词: mh370 词频: 1
16.关键词: 一切 词频: 1
17.关键词: 一线 词频: 1
18.关键词: 一线希望 词频: 1
19.关键词: 上午 词频: 1
20.关键词: 不放 词频: 1
21.关键词: 与 词频: 1
22.关键词: 中国政府 词频: 1
23.关键词: 中心 词频: 1
24.关键词: 中新 词频: 1
25.关键词: 中新网 词频: 1
26.关键词: 了解 词频: 1
27.关键词: 任何 词频: 1
28.关键词: 会后 词频: 1
29.关键词: 关 词频: 1
30.关键词: 分 词频: 1
31.关键词: 切 词频: 1
32.关键词: 前方 词频: 1
33.关键词: 力度 词频: 1
34.关键词: 力量 词频: 1
35.关键词: 加大 词频: 1
36.关键词: 加完 词频: 1
37.关键词: 参加 词频: 1
38.关键词: 可能 词频: 1
39.关键词: 各有 词频: 1
40.关键词: 后来 词频: 1
41.关键词: 国务 词频: 1
42.关键词: 国务院 词频: 1
43.关键词: 国政 词频: 1
44.关键词: 失 词频: 1
45.关键词: 客机 词频: 1
46.关键词: 密度 词频: 1
47.关键词: 希望 词频: 1
48.关键词: 应急 词频: 1
49.关键词: 强要 词频: 1
50.关键词: 总理 词频: 1
51.关键词: 情况 词频: 1
52.关键词: 指挥 词频: 1
53.关键词: 指挥中心 词频: 1
54.关键词: 据 词频: 1
55.关键词: 放弃 词频: 1
56.关键词: 政协 词频: 1
57.关键词: 政府 词频: 1
58.关键词: 政府网 词频: 1
59.关键词: 新网 词频: 1
60.关键词: 新进 词频: 1
61.关键词: 新进展 词频: 1
62.关键词: 方中 词频: 1
63.关键词: 时 词频: 1
64.关键词: 最新 词频: 1
65.关键词: 最新进展 词频: 1
66.关键词: 有 词频: 1
67.关键词: 有关 词频: 1
68.关键词: 有关部门 词频: 1
69.关键词: 来到 词频: 1
70.关键词: 消息 词频: 1
71.关键词: 电 词频: 1
72.关键词: 线 词频: 1
73.关键词: 网 词频: 1
74.关键词: 联 词频: 1
75.关键词: 能力 词频: 1
76.关键词: 航 词频: 1
77.关键词: 船长 词频: 1
78.关键词: 要求 词频: 1
79.关键词: 调集 词频: 1
80.关键词: 进展 词频: 1
81.关键词: 通话 词频: 1
82.关键词: 部门 词频: 1
83.关键词: 闭幕 词频: 1
84.关键词: 闭幕会 词频: 1
85.关键词: 院 词频: 1
86.关键词: 马 词频: 1
最后,我们来看下,如何获取IDF,
核心代码如下:
Java代码 复制代码 收藏代码
1./**
2. * 计算IDF
3. *
4. * **/
5. public void printIDF(){
6.
7. try{
8. Directory directroy=FSDirectory.open(new File("D:\\lucene测试索引\\2014311测试"));
9. IndexReader reader= DirectoryReader.open(directroy);
10. List<AtomicReaderContext> list=reader.leaves();
11. for(AtomicReaderContext ar:list){
12. String field="name";
13. AtomicReader areader=ar.reader();
14. Terms term=areader.terms("name");
15. TermsEnum tn=term.iterator(null);
16.
17. BytesRef text;
18. while((text = tn.next()) != null) {
19.
20. System.out.println("field=" + field + "; text=" + text.utf8ToString()+" IDF : "+tn.docFreq()
21. // +" 全局词频 : "+tn.totalTermFreq()
22. );
23.
24.
25.
26. }
27. }
28. reader.close();
29. directroy.close();
30.
31. }catch(Exception e){
32. e.printStackTrace();
33. }
34.
35.
36. }
输出结果如下:
Java代码 复制代码 收藏代码
1.索引成功了..........
2.field=name; text=10 IDF : 1
3.field=name; text=12 IDF : 1
4.field=name; text=15 IDF : 1
5.field=name; text=3 IDF : 1
6.field=name; text=370 IDF : 1
7.field=name; text=mh IDF : 1
8.field=name; text=mh370 IDF : 1
9.field=name; text=一切 IDF : 1
10.field=name; text=一线 IDF : 1
11.field=name; text=一线希望 IDF : 1
12.field=name; text=上午 IDF : 1
13.field=name; text=不放 IDF : 1
14.field=name; text=与 IDF : 1
15.field=name; text=中国 IDF : 1
16.field=name; text=中国政府 IDF : 1
17.field=name; text=中心 IDF : 1
18.field=name; text=中新 IDF : 1
19.field=name; text=中新网 IDF : 1
20.field=name; text=了解 IDF : 1
21.field=name; text=任何 IDF : 1
22.field=name; text=会后 IDF : 1
23.field=name; text=克强 IDF : 1
24.field=name; text=关 IDF : 1
25.field=name; text=分 IDF : 1
26.field=name; text=切 IDF : 1
27.field=name; text=前方 IDF : 1
28.field=name; text=力度 IDF : 1
29.field=name; text=力量 IDF : 1
30.field=name; text=加大 IDF : 1
31.field=name; text=加完 IDF : 1
32.field=name; text=参加 IDF : 1
33.field=name; text=可能 IDF : 1
34.field=name; text=各有 IDF : 1
35.field=name; text=后来 IDF : 1
36.field=name; text=国务 IDF : 1
37.field=name; text=国务院 IDF : 1
38.field=name; text=国政 IDF : 1
39.field=name; text=失 IDF : 1
40.field=name; text=客机 IDF : 1
41.field=name; text=密度 IDF : 1
42.field=name; text=希望 IDF : 1
43.field=name; text=应急 IDF : 1
44.field=name; text=强要 IDF : 1
45.field=name; text=总理 IDF : 1
46.field=name; text=情况 IDF : 1
47.field=name; text=指挥 IDF : 1
48.field=name; text=指挥中心 IDF : 1
49.field=name; text=据 IDF : 1
50.field=name; text=搜救 IDF : 1
51.field=name; text=放弃 IDF : 1
52.field=name; text=政协 IDF : 1
53.field=name; text=政府 IDF : 1
54.field=name; text=政府网 IDF : 1
55.field=name; text=新网 IDF : 1
56.field=name; text=新进 IDF : 1
57.field=name; text=新进展 IDF : 1
58.field=name; text=方中 IDF : 1
59.field=name; text=日 IDF : 1
60.field=name; text=时 IDF : 1
61.field=name; text=最新 IDF : 1
62.field=name; text=最新进展 IDF : 1
63.field=name; text=月 IDF : 1
64.field=name; text=有 IDF : 1
65.field=name; text=有关 IDF : 1
66.field=name; text=有关部门 IDF : 1
67.field=name; text=李克强 IDF : 1
68.field=name; text=来到 IDF : 1
69.field=name; text=消息 IDF : 1
70.field=name; text=电 IDF : 1
71.field=name; text=线 IDF : 1
72.field=name; text=网 IDF : 1
73.field=name; text=联 IDF : 1
74.field=name; text=能力 IDF : 1
75.field=name; text=航 IDF : 1
76.field=name; text=船长 IDF : 1
77.field=name; text=要求 IDF : 1
78.field=name; text=调集 IDF : 1
79.field=name; text=进展 IDF : 1
80.field=name; text=通话 IDF : 1
81.field=name; text=部门 IDF : 1
82.field=name; text=闭幕 IDF : 1
83.field=name; text=闭幕会 IDF : 1
84.field=name; text=院 IDF : 1
85.field=name; text=马 IDF : 1
apache lucene是apache下一个著名的开源搜索引擎内核,基于Java技术,处理索引,拼写检查,点击高亮和其他分析,分词等技术。
nutch和solr原来都是lucene下的子项目。但后来nutch独立成为独立项目。nutch是2004年由俄勒冈州立大学开源实验室模仿google搜索引擎创立的开源搜索引擎,后归于apache旗下。nutch主要完成抓取,提取内容等工作。
solr则是基于lucene的搜索界面。提供XML/HTTP 和 JSON/Python/Ruby API,提供搜索入口,点击高亮,缓存,备份和管理界面。
hadoop原来是nutch下的分布式任务子项目,现在也成为apache下的顶级项目。nutch可以利用hadoop进行分布式多任务抓取和分析存储工作。
所以,lucene,nutch,solr,hadoop一起工作,是能完成一个中型的搜索引擎工作的。
Lucene版本的更新还是飞快的,现在已经到4.7的版本了,今天,散仙来给大家分享几个Lucene比较有用的小技术。Lucene作为一款优秀的全文检索工具包,自然附带了一些其他比较有用的功能,例如在文本挖掘领域,常常需要统计一些词或短语的TF信息,或者IDF的信息,用来加权某个词条,从而找出某篇新闻,或文献中比较重要的一些关键词或短语,或者我们想得到这些词库的位置信息等等。
下面进入正题,今天散仙就围绕如上所说的,来看下如何利用Lucene来获取TF,IDF,以及term词条的位置信息。
首先,第一个我们来看下如何获取分词后的短语的位置信息,这个功能,主要跟我们的分词器有关系,在分词过程中记录的位置信息,增量信息,载荷等等,我们重点来看下,如何获取位置信息,代码如下:
Java代码 复制代码 收藏代码
1.测试数据
2.中新网3月12日电 据中国政府网消息,3月12日上午10时15分,李克强总理参加完政协闭幕会后来到国务院应急指挥中心,与前方中国搜救船长通话,了解马航MH370失联客机搜救最新进展情况。李克强要求各有关部门调集一切可能力量,加大搜救密度和力度,不放弃任何一线希望。
Java代码 复制代码 收藏代码
1./**
2. * 搜索技术交流群: 324714439
3. *
4. * 获取分词后term的位置信息
5. * @param word 分词的文本
6. * */
7.public void postion(String word)throws Exception{
8.
9. Analyzer analyzer=new IKAnalyzer();//IK分词
10. TokenStream token=analyzer.tokenStream("a", new StringReader(word));
11. token.reset();
12. CharTermAttribute term=token.addAttribute(CharTermAttribute.class);//term信息
13. OffsetAttribute offset=token.addAttribute(OffsetAttribute.class);//位置数据
14. while(token.incrementToken()){
15. System.out.println(term+" "+offset.startOffset()+" "+offset.endOffset());
16. }
17. token.end();
18. token.close();
19.}
Java代码 复制代码 收藏代码
1.输出结果:
2.中新网 0 3
3.中新 0 2
4.新网 1 3
5.3 3 4
6.月 4 5
7.12 5 7
8.日 7 8
9.电 8 9
10.据 10 11
11.中国政府 11 15
12.中国 11 13
13.国政 12 14
14.政府网 13 16
15.政府 13 15
16.网 15 16
17.消息 16 18
18.3 19 20
19.月 20 21
20.12 21 23
21.日 23 24
22.上午 24 26
23.10 26 28
24.时 28 29
25.15 29 31
26.分 31 32
27.李克强 33 36
28.克强 34 36
29.总理 36 38
30.参加 38 40
31.加完 39 41
32.政协 41 43
33.闭幕会 43 46
34.闭幕 43 45
35.会后 45 47
36.后来 46 48
37.来到 47 49
38.国务院 49 52
39.国务 49 51
40.院 51 52
41.应急 52 54
42.指挥中心 54 58
43.指挥 54 56
44.中心 56 58
45.与 59 60
46.前方 60 62
47.方中 61 63
48.中国 62 64
49.搜救 64 66
50.船长 66 68
51.通话 68 70
52.了解 71 73
53.马 73 74
54.航 74 75
55.mh370 75 80
56.mh 75 77
57.370 77 80
58.失 80 81
59.联 81 82
60.客机 82 84
61.搜救 84 86
62.最新进展 86 90
63.最新 86 88
64.新进展 87 90
65.新进 87 89
66.进展 88 90
67.情况 90 92
68.李克强 93 96
69.克强 94 96
70.强要 95 97
71.要求 96 98
72.各有 98 100
73.有关部门 99 103
74.有关 99 101
75.有 99 100
76.关 100 101
77.部门 101 103
78.调集 103 105
79.一切 105 107
80.切 106 107
81.可能 107 109
82.能力 108 110
83.力量 109 111
84.加大 112 114
85.搜救 114 116
86.密度 116 118
87.力度 119 121
88.不放 122 124
89.放弃 123 125
90.任何 125 127
91.一线希望 127 131
92.一线 127 129
93.线 128 129
94.希望 129 131
由上显示,我们可以获取所有短语的位置信息,这个功能在Lucene高亮的时候是非常有用的,如果数据位置发生错位,那么大部分原因都有可能跟这个地方有关系。
第二,我们来看下,如何使用Lucene来获取一片文章中所有短语的词频,这个首先我们的数据是需要索引起来的,并且要开启向量存储的功能,然后我们在去索引里面获取词频,然后,稍作加工,按词频降序输出,由此来直观显示,这篇文章可能重点体现的意思,在这之前,需要对一些常见的禁用词做下处理,以防影响数据结果。
数据和一里面的一样,代码如下:
Java代码 复制代码 收藏代码
1.存储核心代码;
2.
3.FieldType ft=new FieldType();
4. ft.setIndexed(true);//存储
5. ft.setStored(true);//索引
6. ft.setStoreTermVectors(true);
7. ft.setTokenized(true);
8. ft.setStoreTermVectorPositions(true);//存储位置
9. ft.setStoreTermVectorOffsets(true);//存储偏移量
10. Document doc=new Document();
11. doc.add(new Field("name", word, ft));
12. writer.addDocument(doc);
Java代码 复制代码 收藏代码
1. 获取TF的代码
2.
3.**
4. * 读取索引,显示词频
5. *
6. * **/
7. public void getTF(){
8.List<Word> list=new ArrayList<Word>();
9.
10. try{
11. Directory directroy=FSDirectory.open(new File("D:\\lucene测试索引\\2014311测试"));
12. IndexReader reader= DirectoryReader.open(directroy);
13. for (int i = 0; i < reader.numDocs(); i++) {
14. int docId = i;
15. System.out.println("第"+(i+1)+"篇文档:");
16. Terms terms = reader.getTermVector(docId, "name");
17. if (terms == null)
18. continue;
19. TermsEnum termsEnum = terms.iterator(null);
20. BytesRef thisTerm = null;
21. while ((thisTerm = termsEnum.next()) != null) {
22. String termText = thisTerm.utf8ToString();
23. DocsEnum docsEnum = termsEnum.docs(null, null);
24. while ((docsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
25. System.out.println("termText:"+termText+" TF: "+docsEnum.freq());
26. }
27.
28. }
29. }
30.
31. reader.close();
32. directroy.close();
33.
34. Collections.sort(list);
35.
36. for(Word w:list){
37. System.out.println(w);
38. }
39.
40.
41. }catch(Exception e){
42. e.printStackTrace();
43. }
44.
45.
46.}
输出结果如下:
Java代码 复制代码 收藏代码
1.索引成功了..........
2.第1篇文档:
3.关键词: 搜救 词频: 3
4.关键词: 12 词频: 2
5.关键词: 3 词频: 2
6.关键词: 中国 词频: 2
7.关键词: 克强 词频: 2
8.关键词: 日 词频: 2
9.关键词: 月 词频: 2
10.关键词: 李克强 词频: 2
11.关键词: 10 词频: 1
12.关键词: 15 词频: 1
13.关键词: 370 词频: 1
14.关键词: mh 词频: 1
15.关键词: mh370 词频: 1
16.关键词: 一切 词频: 1
17.关键词: 一线 词频: 1
18.关键词: 一线希望 词频: 1
19.关键词: 上午 词频: 1
20.关键词: 不放 词频: 1
21.关键词: 与 词频: 1
22.关键词: 中国政府 词频: 1
23.关键词: 中心 词频: 1
24.关键词: 中新 词频: 1
25.关键词: 中新网 词频: 1
26.关键词: 了解 词频: 1
27.关键词: 任何 词频: 1
28.关键词: 会后 词频: 1
29.关键词: 关 词频: 1
30.关键词: 分 词频: 1
31.关键词: 切 词频: 1
32.关键词: 前方 词频: 1
33.关键词: 力度 词频: 1
34.关键词: 力量 词频: 1
35.关键词: 加大 词频: 1
36.关键词: 加完 词频: 1
37.关键词: 参加 词频: 1
38.关键词: 可能 词频: 1
39.关键词: 各有 词频: 1
40.关键词: 后来 词频: 1
41.关键词: 国务 词频: 1
42.关键词: 国务院 词频: 1
43.关键词: 国政 词频: 1
44.关键词: 失 词频: 1
45.关键词: 客机 词频: 1
46.关键词: 密度 词频: 1
47.关键词: 希望 词频: 1
48.关键词: 应急 词频: 1
49.关键词: 强要 词频: 1
50.关键词: 总理 词频: 1
51.关键词: 情况 词频: 1
52.关键词: 指挥 词频: 1
53.关键词: 指挥中心 词频: 1
54.关键词: 据 词频: 1
55.关键词: 放弃 词频: 1
56.关键词: 政协 词频: 1
57.关键词: 政府 词频: 1
58.关键词: 政府网 词频: 1
59.关键词: 新网 词频: 1
60.关键词: 新进 词频: 1
61.关键词: 新进展 词频: 1
62.关键词: 方中 词频: 1
63.关键词: 时 词频: 1
64.关键词: 最新 词频: 1
65.关键词: 最新进展 词频: 1
66.关键词: 有 词频: 1
67.关键词: 有关 词频: 1
68.关键词: 有关部门 词频: 1
69.关键词: 来到 词频: 1
70.关键词: 消息 词频: 1
71.关键词: 电 词频: 1
72.关键词: 线 词频: 1
73.关键词: 网 词频: 1
74.关键词: 联 词频: 1
75.关键词: 能力 词频: 1
76.关键词: 航 词频: 1
77.关键词: 船长 词频: 1
78.关键词: 要求 词频: 1
79.关键词: 调集 词频: 1
80.关键词: 进展 词频: 1
81.关键词: 通话 词频: 1
82.关键词: 部门 词频: 1
83.关键词: 闭幕 词频: 1
84.关键词: 闭幕会 词频: 1
85.关键词: 院 词频: 1
86.关键词: 马 词频: 1
最后,我们来看下,如何获取IDF,
核心代码如下:
Java代码 复制代码 收藏代码
1./**
2. * 计算IDF
3. *
4. * **/
5. public void printIDF(){
6.
7. try{
8. Directory directroy=FSDirectory.open(new File("D:\\lucene测试索引\\2014311测试"));
9. IndexReader reader= DirectoryReader.open(directroy);
10. List<AtomicReaderContext> list=reader.leaves();
11. for(AtomicReaderContext ar:list){
12. String field="name";
13. AtomicReader areader=ar.reader();
14. Terms term=areader.terms("name");
15. TermsEnum tn=term.iterator(null);
16.
17. BytesRef text;
18. while((text = tn.next()) != null) {
19.
20. System.out.println("field=" + field + "; text=" + text.utf8ToString()+" IDF : "+tn.docFreq()
21. // +" 全局词频 : "+tn.totalTermFreq()
22. );
23.
24.
25.
26. }
27. }
28. reader.close();
29. directroy.close();
30.
31. }catch(Exception e){
32. e.printStackTrace();
33. }
34.
35.
36. }
输出结果如下:
Java代码 复制代码 收藏代码
1.索引成功了..........
2.field=name; text=10 IDF : 1
3.field=name; text=12 IDF : 1
4.field=name; text=15 IDF : 1
5.field=name; text=3 IDF : 1
6.field=name; text=370 IDF : 1
7.field=name; text=mh IDF : 1
8.field=name; text=mh370 IDF : 1
9.field=name; text=一切 IDF : 1
10.field=name; text=一线 IDF : 1
11.field=name; text=一线希望 IDF : 1
12.field=name; text=上午 IDF : 1
13.field=name; text=不放 IDF : 1
14.field=name; text=与 IDF : 1
15.field=name; text=中国 IDF : 1
16.field=name; text=中国政府 IDF : 1
17.field=name; text=中心 IDF : 1
18.field=name; text=中新 IDF : 1
19.field=name; text=中新网 IDF : 1
20.field=name; text=了解 IDF : 1
21.field=name; text=任何 IDF : 1
22.field=name; text=会后 IDF : 1
23.field=name; text=克强 IDF : 1
24.field=name; text=关 IDF : 1
25.field=name; text=分 IDF : 1
26.field=name; text=切 IDF : 1
27.field=name; text=前方 IDF : 1
28.field=name; text=力度 IDF : 1
29.field=name; text=力量 IDF : 1
30.field=name; text=加大 IDF : 1
31.field=name; text=加完 IDF : 1
32.field=name; text=参加 IDF : 1
33.field=name; text=可能 IDF : 1
34.field=name; text=各有 IDF : 1
35.field=name; text=后来 IDF : 1
36.field=name; text=国务 IDF : 1
37.field=name; text=国务院 IDF : 1
38.field=name; text=国政 IDF : 1
39.field=name; text=失 IDF : 1
40.field=name; text=客机 IDF : 1
41.field=name; text=密度 IDF : 1
42.field=name; text=希望 IDF : 1
43.field=name; text=应急 IDF : 1
44.field=name; text=强要 IDF : 1
45.field=name; text=总理 IDF : 1
46.field=name; text=情况 IDF : 1
47.field=name; text=指挥 IDF : 1
48.field=name; text=指挥中心 IDF : 1
49.field=name; text=据 IDF : 1
50.field=name; text=搜救 IDF : 1
51.field=name; text=放弃 IDF : 1
52.field=name; text=政协 IDF : 1
53.field=name; text=政府 IDF : 1
54.field=name; text=政府网 IDF : 1
55.field=name; text=新网 IDF : 1
56.field=name; text=新进 IDF : 1
57.field=name; text=新进展 IDF : 1
58.field=name; text=方中 IDF : 1
59.field=name; text=日 IDF : 1
60.field=name; text=时 IDF : 1
61.field=name; text=最新 IDF : 1
62.field=name; text=最新进展 IDF : 1
63.field=name; text=月 IDF : 1
64.field=name; text=有 IDF : 1
65.field=name; text=有关 IDF : 1
66.field=name; text=有关部门 IDF : 1
67.field=name; text=李克强 IDF : 1
68.field=name; text=来到 IDF : 1
69.field=name; text=消息 IDF : 1
70.field=name; text=电 IDF : 1
71.field=name; text=线 IDF : 1
72.field=name; text=网 IDF : 1
73.field=name; text=联 IDF : 1
74.field=name; text=能力 IDF : 1
75.field=name; text=航 IDF : 1
76.field=name; text=船长 IDF : 1
77.field=name; text=要求 IDF : 1
78.field=name; text=调集 IDF : 1
79.field=name; text=进展 IDF : 1
80.field=name; text=通话 IDF : 1
81.field=name; text=部门 IDF : 1
82.field=name; text=闭幕 IDF : 1
83.field=name; text=闭幕会 IDF : 1
84.field=name; text=院 IDF : 1
85.field=name; text=马 IDF : 1
发表评论
-
elasticsearch异常信息汇总
2017-11-06 09:34 15421.IndexMissingException 异常信息 ... -
Elasticsearch的架构
2018-03-22 10:30 507为什么要学习架构? Elasticsearch的一些架构 ... -
怎么在Ubuntu上打开端口
2017-10-21 20:45 0Netstat -tln 命令是用来查看linux的端口使用情 ... -
Elasticsearch工作原理
2018-03-22 10:30 448一、关于搜索引擎 各 ... -
Elasticsearch的路由(Routing)特性
2017-10-11 10:41 0Elasticsearch路由机制介 ... -
Elasticsearch中的segment理解
2017-10-11 09:58 1876在Elasticsearch中, 需要搞清楚几个名词,如se ... -
Elasticsearch的路由(Routing)特性
2017-09-28 16:52 614Elasticsearch路由机制介绍 Elastics ... -
Elasticsearch 的 Shard 和 Segment
2017-09-28 16:05 1198Shard(分片) 一个Shard就是一个Lu ... -
开源大数据查询分析引擎现状
2017-09-22 03:04 828大数据查询分析是云计算中核心问题之一,自从Google在20 ... -
大数据处理方面的 7 个开源搜索引擎
2017-09-22 03:01 494大数据是一个包括一切 ... -
开源大数据查询分析引擎现状
2017-09-23 11:26 547大数据查询分析是云计算中核心问题之一,自从Google在2 ... -
elasticsearch 把很多类型都放在一个索引下面 会不会导致查询慢
2017-09-25 09:45 979主要看数据量ES索引优 ... -
腾讯大数据Hermes爱马仕的系统
2017-09-23 11:15 982腾讯大数据最近做了几件事,上线了一个官方网站http:// ... -
配置高性能Elasticsearch集群的9个小贴士
2017-09-25 10:02 589Loggly服务底层的很多 ... -
Elasticsearch与Solr
2017-09-25 16:24 546Elasticsearch简介* Elasti ... -
大数据杂谈微课堂|Elasticsearch 5.0新版本的特性与改进
2017-09-26 09:57 808Elastic将在今年秋季的 ... -
ElasticSearch性能优化策略
2017-09-26 09:51 447ElasticSearch性能优化主 ... -
ES索引优化
2017-09-19 20:39 0ES索引优化篇主要从两个方面解决问题,一是索引数据过程;二是 ... -
分词与索引的关系
2017-09-19 20:33 0分词与索引,是中文搜索里最重要的两个技术,而且两者间是密不可 ... -
Elasticsearch中的segment理解
2017-09-19 20:30 0在Elasticsearch中, 需要搞清楚几个名词,如se ...
相关推荐
TF-IDF(Term Frequency-Inverse Document Frequency)是一种在信息检索和自然语言处理中广泛使用的统计方法,用于评估一个词在文档集合中的重要性。在Java编程环境下,TF-IDF可以帮助我们提取文本的关键信息,理解...
TF-IDF(Term Frequency-Inverse Document Frequency)是一种在信息检索和文本挖掘领域广泛使用的权重计算方法,用于评估一个词在文档中的重要性。这个概念基于两个原则:词频(Term Frequency,TF)和逆文档频率...
TF-IDF(Term Frequency-Inverse Document Frequency)是一种在信息检索和文本挖掘中广泛使用的统计方法,用于评估一个词在文档集合中的重要性。这个概念基于两个主要因素:词频(Term Frequency, TF)和逆文档频率...
《深入理解Lucene-2.9.2:中文分词与TF-IDF搜索引擎解析》 Lucene是一个开源的全文检索库,由Apache软件基金会开发,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。本文将围绕“lucene-2.9.2.jar”...
2. **相关性排序**:结合TF-IDF等算法,利用词项频率和文档频率来评估查询与文档的相关性,从而优化搜索结果的排序。 3. **信息检索**:在信息检索系统中,TermVector可以帮助计算文档之间的相似度,实现如余弦...
深入了解 Lucene 之三排序算法 ...Lucene 的排序算法是基于 tf-idf 模型的,通过 tf、idf、coord、queryNorm、norm 等评分因子来计算文档的分数,并提供了丰富的 API 使用户可以实现自定义的排序算法。
本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、执行查询,并比较默认的TF-IDF相似度与BM25相似度的区别。 首先,我们需要了解什么是Lucene。Lucene是一个由...
下面将详细探讨Lucene的核心概念和关键功能,以及如何利用这些特性来实现一个实际的搜索引擎。 1. **Lucene基础** Lucene的核心组件包括索引和查询。索引是Lucene处理大量文本数据的关键,它将非结构化的文本转换...
基于Lucene3.5版本、TF-IDF、余弦相似实现的文本相似度算法。 详细介绍《》 样本库提取 使用webmagic爬取华为应用市场应用的描述信息,当做样本。 在工程的conf/doc目录有1000多个应用样本。 具体代码实现在工程下面...
TF-IDF(Term Frequency-Inverse Document Frequency)是一种在信息检索和自然语言处理中常见的文本特征提取方法,用于量化一个词在文档集合中的重要性。在这个压缩包文件中,包含的插件和测试文件与TF-IDF相关的...
Lucene采用倒排索引(Inverted Index)结构,为每个唯一的术语建立一个术语表,记录该术语在哪些文档中出现以及出现的位置信息,以加速查询速度。 2.3 索引优化 在4.10.3版本中,Lucene对索引过程进行了优化,包括...
TF-IDF(Term Frequency-Inverse Document Frequency)是一种在信息检索和文本挖掘中广泛使用的统计方法,用于评估一个词在文档中的重要性。它基于两个概念:词频(Term Frequency, TF)和逆文档频率(Inverse ...
2. 匹配评分(Scoring):Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)算法计算每个文档与查询的相关性,得分越高,相关性越强。 3. 排序与剪枝(Ranking and Pruning):根据评分对匹配的文档...
4. **结果排序**:根据查询相关性对结果进行排序,一般基于Term Frequency-Inverse Document Frequency (TF-IDF)算法。 5. **结果展示**:将搜索结果呈现给用户,包括文档摘要、评分等信息。 通过上述步骤,开发者...
在Lucene中,评分公式大致可以分为三个部分:Term Frequency (TF),Document Frequency (DF) 和Inverse Document Frequency (IDF)。 1. **Term Frequency (TF)**:表示一个词在文档中出现的频率。Lucene采用对数...
利用lucene进行搜索,IndexSearcher是整个Lucene搜索查询相关信息的驱动引擎,在使IndexSearcher之前,需要构建IndexSearcher对象,Lucene提供了两种构建IndexSearcher对象的方式: 1、基于Directory对象构建; 2...
4. **评分机制**:Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)算法来评估文档的相关性,高频率的关键词在少出现的文档中得分更高。 ### 财经类搜索引擎的特性 1. **领域特有词汇**:财经类...
4. **评分(Scoring)**: Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)算法计算每个匹配文档的相关性分数。 5. **结果排序(Resuliting Sorting)**: 按照评分从高到低排序搜索结果,返回给用户...
Lucene 使用TF-IDF(Term Frequency-Inverse Document Frequency)算法来计算文档的相关性得分。TF-IDF 是一种统计方法,用来评估一个词条在一个文档中的重要程度。公式如下: \[ \text{TF-IDF}(t,d,D) = \text{TF}...
这个资料包显然包含了关于Lucene的相关信息以及可能的实践项目,让我们来深入了解一下Lucene的核心概念、功能以及如何使用它。 **1. Lucene的核心概念** - **索引**: Lucene首先将文本数据转换成可搜索的索引。...