- 浏览: 147444 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (69)
- Maven (1)
- lucene (22)
- bobo zoie (6)
- eclipse (5)
- Nexus (1)
- Git (1)
- trac (1)
- RMI (2)
- svn (0)
- Protocol buffer (0)
- sensei (6)
- JMX (2)
- Faceted search (1)
- Linux (1)
- Cassandra (1)
- Zookeeper (3)
- zoie (1)
- jmap (1)
- mongodb (2)
- 百度百科 (2)
- 词库 (2)
- 抓取 (2)
- IndexTank (1)
- LinkedIn (4)
- norbert (3)
- 分布式 (2)
- senseidb (2)
- Thrift (1)
- scala (1)
- 搜索引擎 (1)
- 质量 (1)
- Nosql (1)
- Jaccard (1)
- Mahout (1)
最新评论
-
bluky999:
@Mark
怎样量化评价搜索引擎的结果质量 -
baso4233:
非常感谢,我跑通了。途中出现了,java.lang.Unsup ...
norbert 高并发分布式服务例子 examples (二) -
yangsong158:
rabbit9898 写道xiansuanla 写道我运行 m ...
JMX 入门例子 -
rabbit9898:
xiansuanla 写道我运行 main方法以后 cmd 里 ...
JMX 入门例子 -
xiansuanla:
我运行 main方法以后 cmd 里面运行 jconsole ...
JMX 入门例子
要做一个跟文章标题相关的新闻,本来想简单做一下,就是把标题用分词处理一下,去除停用词,做个布尔查询,朋友建议lucene有一个 MoreLikeThisQuery,试了一下功能,觉得还可以,贴上示例代码 (MoreLikeThisQuery 在contrib 下的Queryies):
pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>lucene-test</groupId> <artifactId>lucene-test</artifactId> <version>0.1-SNAPSHOT</version> <name>lucene-test</name> <dependencies> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>2.9.2</version> <!-- 3.0.0 --> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queries</artifactId> <version>2.9.2</version> <!-- 3.0.0 lucene-queries-2.9.2-dev.jar--> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>
Java文件:
package lucene.test; import java.io.File; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; import org.apache.lucene.search.Explanation; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.similar.MoreLikeThisQuery; import org.apache.lucene.store.NIOFSDirectory; import org.apache.lucene.util.Version; //ref doc: //http://www.iteye.com/topic/586043 //http://www.cnblogs.com/forfuture1978/archive/2010/05/19/1738803.html //http://www.javadocexamples.com/java_source/org/apache/lucene/xmlparser/builders/LikeThisQueryBuilder.java.html public class LuceneTestLike { public static void main(String[] args) { try{ String path = "./Index"; StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_29) ; boolean isIndex = false; // true:要索引,false:表示要搜索 if(isIndex){ IndexWriter writer = new IndexWriter(new NIOFSDirectory(new File(path)),analyzer,MaxFieldLength.LIMITED); Document doc_0 = new Document(); doc_0.add(new Field("Name","java 开发人员", Field.Store.YES, Field.Index.ANALYZED)); doc_0.add(new Field("Info","招聘 网站开发人员,要求一年或以上工作经验", Field.Store.YES, Field.Index.ANALYZED)); doc_0.add(new Field("Time","20100201", Field.Store.YES, Field.Index.NOT_ANALYZED)); writer.addDocument(doc_0); Document doc_1 = new Document(); doc_1.add(new Field("Name","高级开发人员(java 方向)", Field.Store.YES, Field.Index.ANALYZED)); doc_1.add(new Field("Info","需要有四年或者以上的工作经验,有大型项目实践,java基本扎实", Field.Store.YES, Field.Index.ANALYZED)); doc_1.add(new Field("Time","20100131", Field.Store.YES, Field.Index.NOT_ANALYZED)); writer.addDocument(doc_1); Document doc_2 = new Document(); doc_2.add(new Field("Name","php 开发工程师", Field.Store.YES, Field.Index.ANALYZED)); doc_2.add(new Field("Info","主要是维护公司的网站php开发,能独立完成网站的功能", Field.Store.YES, Field.Index.ANALYZED)); doc_2.add(new Field("Time","20100201", Field.Store.YES, Field.Index.NOT_ANALYZED)); writer.addDocument(doc_2); Document doc_3 = new Document(); doc_3.add(new Field("Name","linux 管理员", Field.Store.YES, Field.Index.ANALYZED)); doc_3.add(new Field("Info","管理及维护公司的linux服务器,职责包括完成mysql数据备份及日常管理,apache的性能调优等", Field.Store.YES, Field.Index.ANALYZED)); doc_3.add(new Field("Time","20100201", Field.Store.YES, Field.Index.NOT_ANALYZED)); writer.addDocument(doc_3); Document doc_4 = new Document(); doc_4.add(new Field("Name","lucene开发工程师", Field.Store.YES, Field.Index.ANALYZED)); doc_4.add(new Field("Info","需要两年或者以上的从事lucene java 开发工作的经验,需要对算法,排序规则等有相关经验,java水平及基础要扎实", Field.Store.YES, Field.Index.ANALYZED)); doc_4.add(new Field("Time","20100131", Field.Store.YES, Field.Index.NOT_ANALYZED)); writer.addDocument(doc_4); Document doc_5 = new Document(); doc_5.add(new Field("Name","php 软件工程师", Field.Store.YES, Field.Index.ANALYZED)); doc_5.add(new Field("Info","具有大量的php开发经验,如熟悉 java 开发,数据库管理则更佳", Field.Store.YES, Field.Index.ANALYZED)); doc_5.add(new Field("Time","20100130", Field.Store.YES, Field.Index.NOT_ANALYZED)); writer.addDocument(doc_5); writer.close(); System.out.println("数据索引完成"); }else{ IndexSearcher search = new IndexSearcher(new NIOFSDirectory(new File(path)),true); String kw="php 开发工程师" ; //"lucene java"; //"开发工程师"; //"php 开发工程师"; String[] moreLikeFields = { "Name"} ; //{ "Name" ,"Info"}; MoreLikeThisQuery query = new MoreLikeThisQuery(kw, moreLikeFields, analyzer); // 设置停用词 // query.setStopWords(getStopWords(reader)); //最少的词频 //Sets the frequency below which terms will be ignored in the source doc. query.setMinTermFrequency(1); //最多的查询词数目 //Sets the maximum number of query terms that will be included in any generated query. query.setMaxQueryTerms(5); //词至少在这么多篇文档中出现 //Ignore words which do not occur in at least this many docs. DEFAULT_MIN_DOC_FREQ = 5 query.setMinDocFreq(1); System.out.println("搜索条件:" + query.toString()); long start = System.currentTimeMillis(); TopDocs tDocs = search.search(query,10); ScoreDoc sDocs[] = tDocs.scoreDocs; int len = sDocs.length; for(int i=0;i<len;i++){ ScoreDoc tScore = sDocs[i]; //从Lucene3.0开始已经不能通过 tScore.score 这样来得到些文档的得分了 int docId = tScore.doc; Explanation exp = search.explain(query, docId); Document tDoc = search.doc(docId); String Name = tDoc.get("Name"); String Info = tDoc.get("Info"); String Time = tDoc.get("Time"); float score = exp.getValue(); //System.out.println(exp.toString()); //如果需要打印文档得分的详细信息则可以通过此方法 System.out.println("DocId:"+docId+"\tScore:" + score + "\tName:" + Name + "\tTime:" + Time + "\tInfo:" + Info); } Long end = System.currentTimeMillis(); System.out.println("搜索用时:" + (end -start) + "ms"); search.close(); } }catch(Exception ex){ ex.printStackTrace(); } } }
运行结果:
搜索条件:like:php 开发工程师
DocId:2 Score:1.1971036 Name:php 开发工程师 Time:20100201 Info:主要是维护公司的网站php开发,能独立完成网站的功能
DocId:5 Score:0.82631415 Name:php 软件工程师 Time:20100130 Info:具有大量的php开发经验,如熟悉 java 开发,数据库管理则更佳
DocId:4 Score:0.6882751 Name:lucene开发工程师 Time:20100131 Info:需要两年或者以上的从事lucene java 开发工作的经验,需要对算法,排序规则等有相关经验,java水平及基础要扎实
DocId:0 Score:0.038315877 Name:java 开发人员 Time:20100201 Info:招聘 网站开发人员,要求一年或以上工作经验
DocId:1 Score:0.027368484 Name:高级开发人员(java 方向) Time:20100131 Info:需要有四年或者以上的工作经验,有大型项目实践,java基本扎实
搜索用时:47ms
发表评论
-
基于sensei+lucene的分布式搜索终于上线了-2012-12-08
2011-12-08 13:26 1584基于sensei+lucene的分布式搜索终于上线了 ... -
[转载] sensei分布式实时搜索系统源码解析(二) 分布式Search的流程
2011-07-22 14:57 1434看来自己很懒,发现前同事的sensei 研究了 转载: ht ... -
[转载] sensei分布式实时搜索系统源码解析(一) senseiServer的启动及若干概念
2011-07-22 14:55 1752看来自己很懒,发现前同事的sensei 研究了 转载:htt ... -
lucene分布式搜索sensei的使用及完善
2011-07-22 14:32 3509原创文章,转载请注明 ... -
转载:几种常见的基于Lucene的开源搜索解决方案对比
2011-04-06 14:38 1305一 直接使用 Lucene ( http://lucene ... -
转载: Apache Zookeeper入门1
2011-04-06 14:36 1869源: http://www.javabloger.com/ar ... -
转载:Lucene查询语法详解
2011-04-02 10:33 1062英文原文地址:http: ... -
各种字符串Hash函数比较
2011-02-12 14:54 4088Java自带的字符串hash函数: public ... -
Lucene MoreLikeThisQuery 例子 备注
2011-01-06 11:22 14211。 编码问题: MoreLikeThisQuery中的 ... -
lucene 3.0 分词例子 转载
2010-12-27 17:30 1885源:http://hxraid.iteye.com/blog ... -
lucene基本概念
2010-12-03 15:51 1123一、lucene索引的建立 1 ... -
[转载] lucene使用与优化
2010-12-03 10:14 1035源:http://www.cnblogs.com/bysshi ... -
[转载] 几种常见的基于Lucene的开源搜索解决方案对比
2010-12-02 16:07 869源:http://blog.fulin.org/201 ... -
lucene中的Token, TokenStream, Tokenizer, Analyzer
2010-11-22 10:41 1314转载: Token: 如果一个字段被token化,这表示它经 ... -
Lucene3.0的几种分词系统
2010-11-17 17:25 12581、 StopAnalyzer StopAnalyze ... -
当前几个主要的Lucene中文分词器的比较
2010-11-17 12:35 12921. 基本介绍: paoding :Lucene中 ... -
lucene score explain 评分解释说明
2010-11-16 17:29 2229通过Searcher.explain(Query qu ... -
lucene 排序 (Sort SortField 构造函数)
2010-11-09 13:58 4079注意: 在lucene2.9中,排序的字段域必须inde ... -
lucene 2010 大会资料 Lucene Revolution 2010
2010-10-27 15:41 927lucene 2010 大会资料资料下载 http://ww ... -
bobo-browse 的分组统计(Faceted Search)
2010-10-25 16:43 2594基于lucene的bobo-browse 的分组统计(Face ...
相关推荐
lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子
lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子
lucene3.0 例子lucene3.0 例子 lucene3.0 例子 ,很好的学习,只有原代原,jar 包自己加上去就OK了
lucene文档例子
lucene入门小例子
一个基于LUCENE搜索引擎项目例子一个基于LUCENE搜索引擎项目例子一个基于LUCENE搜索引擎项目例子
Lucene操作数据库例子,通过JDBC程序+Lucene
Lucene学习例子与文档,有兴趣的朋友可以看看。
NULL 博文链接:https://chinaxxren.iteye.com/blog/548498
Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
lucene3.6 搜索例子
lucene 简单例子 , 直接运行, `
lucene Heritrix
B/S架构下采用LUCENE开发的一个搜索引擎的小例子
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
这是一个lucene人例子,大家可以参考一下。很不错了。
lucene demo lucene 使用例子 更快掌握lucene
Lucene 7.1 RMI远程搜索例子 Lucene 7.1 RMI远程搜索例子 Lucene 7.1 RMI远程搜索例子
lucene入门例子,有创建索引和检索。详情:http://blog.csdn.net/authorzhh/article/details/7869806